The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Apple выпустил язык программирования Swift 5.3 и открыл код библиотеки Swift System, opennews (ok), 26-Сен-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


43. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от НяшМяш (ok), 26-Сен-20, 15:49 
Структуры в Swift используют copy-on-write. То есть спокойно можно передавать структуру в методы и ничего копироваться не будет. А если вам нужно структуру модифицировать избежав копирования, то всегда есть inout и &
Ответить | Правка | Наверх | Cообщить модератору

45. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от Anonymous23554 (?), 26-Сен-20, 16:05 
есть сомнения, что вы про Array и Dictionary, которые copy-on-write, но в swift на данный момент есть только копируемые struct, а перемещаемых struct нет на данный момент.
Ответить | Правка | Наверх | Cообщить модератору

52. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от НяшМяш (ok), 26-Сен-20, 16:53 
Да, точно, только коллекции CoW. Но это не отменяет возможности структуры перемещать. Хотя и делается это немного костыльно:

func address(of data: UnsafeRawPointer) -> Int {
  return Int(bitPattern: data)
}

struct MoveOnly {
    var prop: Int = 0
}

func doSomething(data: inout MoveOnly) -> Void {
    data.prop = 5
    
    print(address(of: &data))
}


var base = MoveOnly()
print(address(of: &base))

base.prop = 3
print(address(of: &base))

doSomething(data: &base)
print(address(of: &base))

Такой код у меня печатает один и тот же адрес. А вот если я захочу из doSomething вернуть MoveOnly (или даже UnsafePointer<MoveOnly>), тогда результат будет копией.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру