相关疑难解决方法(0)

何时进行快速值类型的复制

在Swift中,当您传递值类型时,请将Array表示为函数.数组的副本用于要使用的函数.

但是,https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134上的文档也说:

上面的描述涉及字符串,数组和字典的"复制".您在代码中看到的行为将始终如同副本一样.但是,当绝对必要时,Swift仅在幕后执行实际复制.Swift管理所有值复制以确保最佳性能,您不应该避免分配以尝试抢占此优化.

那么这是否意味着复制实际上仅在修改传递的值类型时进行?

有没有办法证明这实际上是潜在的行为?

为什么这很重要?如果我创建一个大的不可变数组并希望将其从函数传递给函数,我当然不希望继续复制它.我是否应该在这种情况下使用NSArrray,或者只要我不尝试操作传入的数组,Swift数组是否正常工作?

现在只要我没有使用var或inout明确地使函数中的变量可编辑,那么该函数无论如何都无法修改数组.那还能复制一份吗?假设另一个线程可以在其他地方修改原始数组(只有它是可变的),在调用该函数时生成一个副本(但只有在传入的数组是可变的时).因此,如果原始数组是不可变的并且函数不使用var或inout,则Swift创建副本没有任何意义.对?那么Apple对上述短语的意思是什么?

swift

10
推荐指数
1
解决办法
728
查看次数

如何在 Swift 中创建生成器?

我可以在 Swift 中创建一个生成器吗?

使用迭代器,我需要存储中间结果,例如:

struct Countdown: IteratorProtocol, Sequence {

    private var value = 0

    init(start: Int) {
        self.value = start
    }

    mutating func next() -> Int? {
        let nextNumber = value - 1
        if nextNumber < 0 {
            return nil
        }

        value -= 1

        return nextNumber
    }
}

for i in Countdown(start: 3) {
    print(i)
} // print 1 2 3
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我需要存储value.

在我的情况下,我想使用生成器而不是迭代器,因为我不想将序列的中间结果存储在每个next.

generator swift

5
推荐指数
1
解决办法
6483
查看次数

标签 统计

swift ×2

generator ×1