迅速在NSString上进行便捷的初始化

阿努吉

当我尝试快速在NSString上创建便捷初始化程序时,它失败并显示

错误:无法分配给值:'self'是不可变的self =“(number)”

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

虽然对String的类似扩展有效

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

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

值类型(structenum)不支持继承,并且具有更简单的初始化规则。特别是,您可以通过分配给来初始化值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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何覆盖UIAlertController中的便捷初始化,以便迅速进行?

便捷初始化

扩展UIAlertController便捷初始化警告

如何在TensorFlow上进行Xavier初始化

在单个页面上进行多个刷卡初始化?

在便捷初始化Swift 3中获取类名

在Swift子类中添加便捷初始化器

用于SKPhysicsBody的Swift便捷初始化程序扩展

快速便捷初始化和通用类

在声明变量时进行初始化与在c中的单独行上进行比较

是否可以使用便捷初始化程序覆盖指定的初始化程序?

快速初始化和便捷实例之间的便利初始化与初始化之间有什么区别

在类级别初始化静态NSString

在g ++上进行聚合初始化的std :: array会生成大量代码

在BIOS上进行鼠标初始化需要很长时间

UIView的指定初始化器迅速

在Swift中,为什么我需要重写此初始化程序才能创建自己的便捷初始化程序?

为SKScene创建一个自定义的初始化器,以覆盖便捷初始化吗?(fileNamed :)

Rails应用程序不会使用hive_geoip2 gem在弹性beantalk上进行初始化

UIViewController子类的便捷初始化程序,带有来自笔尖的实例?

Swift:便捷初始化程序-在self.init调用之前使用的Self

如何在Swift中使用嵌套的便捷故障初始化器检查nil?

在调用self.init之前使用的iOS Swift便捷初始化程序self

是否可以在Objective-C中调用Swift便捷初始化程序

Swift 3:便捷初始化程序扩展了Foundation的“ Timer”挂起

当init NSCoder是Swift中基类的便捷方法时,在子类中正确初始化NSCoder

在Swift中使用NSDictionary便捷初始化遇到问题

const类型'NSString * const __strong'的对象的默认初始化?

迅速; 从未使用过不变值的初始化