我不明白为什么类型系统允许我这样做?
换句话说当foo传递给函数时,我希望这会崩溃。
var foo:String!
func someFunction(_ bar:String?) {
print("-- \(bar) --")
}
someFunction(foo)
=> writes "-- nil --"
答案 0 :(得分:2)
正如@Hamish所以正确指出: https://stackoverflow.com/a/39537558/308189
如果可以使用强可选类型显式地检查表达式,那么它将是。但是,如果需要,类型检查器将回退到强制可选。
答案的评论解释了为什么要问这个问题:
好像你不得不使用IUO一样,现在它们不那么有用并且行为矛盾。如果我使用它,因为我希望它被隐式解开。从现在开始,它们应该被称为SchrödingerOptionals。 - 安德烈亚斯
答案 1 :(得分:1)
在someFunction
内,您正在打印可选的非字符串。这就是它没有崩溃的原因。如果要打印条形为String
,则必须打开该值。
答案 2 :(得分:0)
// This line will create variable named foo and type of it will be String! and value of it will be nil.
// It mean i can access this variable is force-wraped so it may dangerous but uses of this variable without type checking compiler will not give any warning(ignore by compiler).
var foo:String!
// This function will accept `String` value or `nil`.
func someFunction(_ bar:String?) {
print("-- \(bar) --")
}
// So calling this function use of `foo`(valued nil) will not give any compiler issue.
someFunction(foo)