当我尝试快速在NSString上创建便捷初始化程序时,它失败并显示
错误:无法分配给值:'self'是不可变的self =“(number)”
extension NSString {
public init(for number: Int) {
self = "\(number)"
}
}
虽然对String的类似扩展有效
extension String {
public init(for number: Int) {
self = "\(number)"
}
}
NSString
是一个类(引用类型)和String
一个结构(值类型),并且它们具有不同的初始化规则。
值类型(struct
和enum
)不支持继承,并且具有更简单的初始化规则。特别是,您可以通过分配给来初始化值self
:
extension String {
public init(for number: Int) {
self = "\(number)"
}
}
类初始化是一个两阶段的过程,以防止在属性值被初始化之前对其进行访问。它必须遵循某些规则,其中之一是便利初始化程序必须委托给相同类型的另一个初始化程序(并最终委托给指定的初始化程序):
extension NSString {
public convenience init(for number: Int) {
self.init(string: "\(number)")
}
}
与Objective-C相反,Swift不支持(工厂?)“工厂初始化”,您可以在其中创建并返回类或某些子类的实例,而不是进行初始化self
。
有关详细信息,请参见“ Swift编程语言”参考中的初始化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句