作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我尝试在 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
是一个结构(值类型),并且它们具有不同的初始化规则。
值类型(struct
和enum
)不支持继承并且有更简单的初始化规则。特别是,您可以初始化一个通过分配给 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/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!