gpt4 book ai didi

swift - NSString 上的便捷初始值设定项

转载 作者:可可西里 更新时间:2023-11-01 00:56:42 24 4
gpt4 key购买 nike

当我尝试在 NSString 上快速创建一个便利初始化器时,它失败了

error: cannot assign to value: 'self' is immutable self = "(number)"

extension NSString {
public init(for number: Int) {
self = "\(number)"
}
}

虽然在 String 上有一个类似的扩展

extension String {
public init(for number: Int) {
self = "\(number)"
}
}

最佳答案

NSString 是一个(引用类型),String 是一个结构(值类型),并且它们具有不同的初始化规则。

值类型(structenum)不支持继承并且有更简单的初始化规则。特别是,您可以初始化一个通过分配给 self 的值:

extension String {
public init(for number: Int) {
self = "\(number)"
}
}

类初始化是一个两阶段的过程,以防止属性值在初始化之前被访问。它必须遵循一定的规则,其中之一是便利初始化器必须委托(delegate)给另一个初始化器相同类型(并最终指定初始化器):

extension NSString {
public convenience init(for number: Int) {
self.init(string: "\(number)")
}
}

与 Objective-C 相反,Swift 不(还?)支持“工厂初始化”,您可以在其中创建并返回类或某些子类,而不是初始化 self

有关详细信息,请参阅 Initialization在“The Swift Programming Language”引用中。

关于swift - NSString 上的便捷初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com