Swift 初始化后,Willset不保留值

Swift 初始化后,Willset不保留值,swift,Swift,您好,我有一个可选变量,它使用willset功能。因为它是可选的,所以常规设置不起作用。在will集合中,我将变量设置为至少在新值为nil时初始化它。不幸的是,后面的值是零,还有什么想法?多谢各位 代码: 因为它是可选的,所以常规设置将不起作用 不对。由于它不是一个计算属性,集将不起作用 您需要重新阅读有关willSet和didSet的部分willSet。也就是说,调用代码的赋值将立即覆盖中写入变量的内容 如果指定nil,则将用nil覆盖字符串数组 简化 var arrayOfString: [

您好,我有一个可选变量,它使用willset功能。因为它是可选的,所以常规设置不起作用。在will集合中,我将变量设置为至少在新值为nil时初始化它。不幸的是,后面的值是零,还有什么想法?多谢各位

代码:

因为它是可选的,所以常规设置将不起作用

不对。由于它不是一个计算属性,
将不起作用

您需要重新阅读有关
willSet
didSet
的部分<在将任何值写入变量之前调用code>willSet。也就是说,调用代码的赋值将立即覆盖
中写入变量的内容

如果指定
nil
,则将用
nil
覆盖字符串数组

简化

var arrayOfString: [String] = []
因为它是可选的,所以常规设置将不起作用

不对。由于它不是一个计算属性,
将不起作用

您需要重新阅读有关
willSet
didSet
的部分<在将任何值写入变量之前调用code>willSet
。也就是说,调用代码的赋值将立即覆盖
中写入变量的内容

如果指定
nil
,则将用
nil
覆盖字符串数组

简化

var arrayOfString: [String] = []

您需要使用
didSet

var arrayOfString: [String]? {
    didSet {
        self.arrayOfString = arrayOfString ?? []
    }
}
否则,该值将立即被原始值覆盖

但是请注意,如果变量不应包含可选变量,则应声明为:

var arrayOfString: [String]
作业中应添加
??[]
在需要时


否则,每次访问值时都必须处理展开操作。

您需要使用
didSet

var arrayOfString: [String]? {
    didSet {
        self.arrayOfString = arrayOfString ?? []
    }
}
否则,该值将立即被原始值覆盖

但是请注意,如果变量不应包含可选变量,则应声明为:

var arrayOfString: [String]
作业中应添加
??[]
在需要时


否则,每次访问该值时都必须处理展开操作。

为什么要先将其设置为可选?为什么不干脆
var arrayOfString=[String]()
?@Hamish谢谢你的回答,我想让它成为可选的,因为初始的arrayOfString=someValue将来自应用程序的不同部分,因此,我想如果我先初始化,然后应用程序确实得到一个字符串数组并添加到这里,当我不需要时,我会使用2个内存空间?为什么一开始就让它成为可选的?为什么不干脆
var arrayOfString=[String]()
?@Hamish谢谢你的回答,我想让它成为可选的,因为初始的arrayOfString=someValue将来自应用程序的不同部分,因此,我想如果我先初始化,然后应用程序确实得到一个字符串数组并添加到这里,如果我不需要的话,我会使用2个内存空间?谢谢你的回答,我认为这是可选的,因为初始arrayOfString=someValue将来自应用程序的不同部分,因此,我认为如果我先初始化,然后应用程序确实得到一个字符串数组并将其添加到这里,当我不需要时,我会使用2个内存空间?@paul590这叫做过早优化。不要担心分配空数组所需的内存。感谢您的回复,我认为这是可选的,因为初始arrayOfString=someValue将来自应用程序的不同部分,因此,我认为如果我先初始化,然后应用程序确实获得字符串数组并将其添加到此处,当我不需要时,我会使用2个内存空间?@paul590这叫做过早优化。不要担心分配空数组所需的内存。谢谢你的回答我想是这样,但我想100%确定谢谢你的回答我想是这样,但我想100%确定