swift Lazy var initialization error“Cannot use mutating getter on immutable value”(无法对不可变值使用可变getter)

ttp71kqs  于 2023-04-28  发布在  Swift
关注(0)|答案(1)|浏览(190)

我尝试了两种初始化lazy var的方法,一种可以工作,另一种得到编译器错误。

  1. String = String();maxDiscount.最大折扣百分比
    1.错误:MaxDiscount()。maxDiscountPercent如果maxDiscountPercent是一个存储属性而不是一个惰性变量,两种用法都可以使用。
    简化示例:
struct MaxDiscount {
        lazy var maxDiscountPercent: Int = {
        print("Lazy var maxDiscountPercent initialized")
        return 256
    }()
    
}
// initializes lazy var without an error

var maxDiscount = MaxDiscount()
print("Max percent discount: ", maxDiscount.maxDiscountPercent)

// initializes lazy var with error:
// "Cannot use mutating getter on immutable value: function call returns immutable value"

var maxDiscountPercent = MaxDiscount().maxDiscountPercent
print("Max percent discount: ", maxDiscountPercent)

我不清楚为什么一种用法是可变的而另一种是不变的。

jogvjijk

jogvjijk1#

当你写var maxDiscount时,你声明了一个变量(可变的)。你会有一个常量(不可变的)let maxDiscount = MaxDiscount()
现在有了var maxDiscountPercent = MaxDiscount().maxDiscountPercentMaxDiscount()是一个匿名常量,你不能对它做任何事情。
尝试let maxDiscount = MaxDiscount(),您将得到相同类型的错误,并邀请将let更改为var

相关问题