基于https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
由标准库定义的集合,例如数组,字典, 和字符串使用优化来降低性能成本 复制。这些收藏共享而不是立即复制,而是共享 原始实例之间存储元素的内存 以及任何副本。如果修改了其中一个副本, 元素将在修改之前复制。你的行为 在您的代码中总是看到立即进行复制。
我想知道如何将struct作为函数参数传递,如以下代码所示?
noteStruct = NoteStruct()
// Does actual copy happen immediately?
someFunctionWhichPerformsReadOnly(note)
func someFunctionWhichPerformsReadOnly( _ noteStruct: NoteStruct)
在将struct作为函数参数传递时,实际复制会立即发生吗?还是Swift编译器足够聪明,可以避免上述情况下的实际复制?
struct Note {
var data = "original"
mutating func mutate() {
data = "modified"
}
func readonly() {
print("read : \(data)")
}
}
func doSomething1(_ note: Note) {
var localNote = note
localNote.mutate()
}
func doSomething2(_ note: Note) {
note.readonly()
}
let note = Note()
doSomething1(note)
doSomething2(note)
在调用doSomething1
和doSomething2
时,Swift是否足够聪明,可以避免实际复制?