考虑以下代码:
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/