swift - "Expression resolves to an unused l-value"与 "Expression is unused"

标签 swift compiler-errors lvalue

考虑以下代码:

class Foo {
    let bar = "Hello world!"
    init () {
        self // Warning: Expression of type 'Foo' is unused
        self.bar // Error: Expression resolves to an unused l-value
    }
    func test () {
        self.bar // Warning: Expression of type 'String' is unused
    }
}

为什么消息不同,为什么只有一个错误?我明白它们的意思,只是不明白为什么编译器会以不同的方式处理它们。

最佳答案

编译器之所以在初始化程序中将 self.bar 视为左值,是因为在初始化期间您可以在初始化期间的任何时候为常量属性赋值即使您已将其声明为常量,编译器也会将其视为错误,因为有机会修改常量...

虽然 test() 函数中的 self.bar 被视为右值,因为该属性被声明为常量并且编译器知道您无法修改它所以不会产生错误,它将被视为 r 值并且返回值未被使用..

如果您需要更好地理解,请尝试将您的属性更改为变量而不是常量,您会发现即使是 test() 方法中的 self.bar 语句会出错,因为编译器猜测这个值也可以是左值。

class Foo {
    var bar = "Hello world!"
    init () {
        self // Warning: Expression of type 'Foo' is unused
        self.bar  // Error: Expression resolves to an unused l-value
    }
    func test () {
        self.bar // Changed to : Error: Expression resolves to an unused l-value
    }
}

关于swift - "Expression resolves to an unused l-value"与 "Expression is unused",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51956912/

相关文章:

ios - 对静态单元格使用 UITableViewAutomaticDimension 后,单元格高度太小

ios - 将 watch 应用程序构建到设备

iphone - Lion上Xcode 4.1的奇怪编译错误

ios - 从字符串数组中获取 NSClassFromString - Swift

swift - 如何获取图像上给定点(x,y)的灰度像素值?

swift 方法 : deinit is not invoked

c++ - 奇怪的编译器错误

c++方法调用(左值)绑定(bind)到派生类中的函数(右值)而不是基类中的函数(左值)

c++ - 为什么左值转换有效?

c++ - 将右值引用传递给 const 左值引用参数