在 iOS 中使用 NSMutableAttributedString 作为常量

Using NSMutableAttributedString as a Constant in iOS

我刚开始学习Swift,遇到了一些我不明白的东西。在教程中,作者在常量内创建了一个 NSMutableAttributedString。后来这个常数被改变了。我不明白的是这怎么可能而不会出现任何错误。 NSMutableAttributedString 是否由于缺乏更好的术语而以某种方式覆盖常量规则?

@IBAction func buttonPressed(sender: UIButton) {
    let title = sender.titleForState(.Normal)!
    let plainText = "\(title) button pressed"
    let styledText = NSMutableAttributedString(string: plainText)
    let attributes = [NSFontAttributeName: UIFont.boldSystemFontOfSize(statusLabel.font.pointSize)]
    let nameRange = (plainText as NSString).rangeOfString(title)
    styledText.setAttributes(attributes, range: nameRange)

    statusLabel.attributedText = styledText
}

NSMutableAttributedString无关,与styledText存储引用类型有关。因为它被定义为常量,所以你不能改变它的值:

styledText = NSMutableAttributedString(string: "anotherString") // Error

但您可以更改变量指向的实例。

Swift 中的 let 关键字强制实现值类型(结构和枚举)的不变性,而不是引用类型。

Swift中的结构和枚举有两种类型的方法:

  • 变异方法,使用关键字 mutating
  • 定义
  • 非变异方法(默认行为)

如果您将结构或枚举的实例分配给可变存储(您使用 var 定义的东西),您可以通过调用任何变异或非变异来自由修改它的状态方法就可以了。

如果将其分配给不可变存储(使用 let 定义),则只能调用其上的非可变方法。您也不能使存储存储另一个实例(即,您不能为其分配另一个结构或枚举)。

类,作为引用类型,没有变异或非变异方法的概念。