我是Swift的新手,正试图弄清楚Optional的概念。我在Playground中有一小段代码,它给了我“条件中的变量绑定需要初始化器”错误。有人能解释一下为什么以及如何解决这个问题吗?
我只想打印“Yes”或“No”,这取决于“score1”是否有值。下面是代码:
import Cocoa
class Person {
var score1: Int? = 9
func sum() {
if let score1 {
print("yes")
} else {
print("No")
}
}//end sum
}// end person
var objperson = person()
objperson.sum()
6条答案
按热度按时间x33g5p2x1#
if let语句接受一个可选变量。如果它是nil,则执行else块或nothing。如果它有一个值,则该值将作为非可选类型分配给其他变量。
因此,下面的代码将输出score1的值,如果没有,则输出“No”:
相同的较短版本将是:
在你的例子中,你实际上没有使用存储在可选变量中的值,你也可以检查值是否为nil:
3wabscal2#
写作
这说不通啊如果想查看score是否有值,请使用
或
最后一种情况将一个新的非可选常量
score
绑定到score1
。这允许您在if语句中使用score
。7eumitmz3#
你问题中的代码与我在Swift书籍和文档中看到的类似,它们是正确的。
你的playground使用的是旧版本的swift,目前不支持这种语法。使用XCode的beta版本应该可以修复
https://www.reddit.com/r/swift/comments/vy7jhx/unwrapping_optionals/
wfauudbj4#
问题是
if let
假设你想创建一个有某个值的常量score1
。如果你只是想检查它是否包含一个值,就像在不是nil
中一样,你应该像下面这样做:所以你的完整代码看起来像这样:
0yycz8jy5#
问题中的语法自问题第一次发布以来就已成为有效的Swift(如评论中所述)。
在控制流检查表中,可选绑定使用与声明相同的语法(使用
let
和var
),尽管语义略有不同:表达式的类型必须是Optional
,如果值是nil
,检查表将立即短路,如果值不是nil
,则值将隐式展开。注意:支持解构。每个表达式都必须是
Optional
(才能编译),如果任何值是nil
,检查表就会短路。由于直接重用(通过重新声明)Swift中的变量非常常见,因此可以使用简写
let foo
(或var foo
)(在检查表中)代替let foo = foo
(或var foo = foo
)。vjrehmav6#
您可以使用以下命令展开它:
然后这样称呼它: