我有一个问题:“我想它为什么起作用,但是我应该在这里要求它检查我的想法:D。
我有一个代码:
let possibleNumber = "1232"
var somevariable : Int
if let actualNumber = Int(possibleNumber) {
somevariable = actualNumber
} else {
print("\(possibleNumber) could not be converted to an integer")
}
print(somevariable)
和错误:变量'somevariable'在初始化之前使用
但是如果我有这样的东西:
let possibleNumber = "1232"
var somevariable : Int
if let actualNumber = Int(possibleNumber) {
somevariable = actualNumber
} else {
somevariable = 0
}
print(somevariable)
它将正常工作。
如果我删除else块,它也会出错。无论如何,我的理解是这样的:例如,我不允许您设置 somevariable 为零的情况,因为他的类型不是可选的。
也许我的想法是错误的,或者您有更好的解释。感谢您的帮助和良好的链接。 祝你好运!
答案 0 :(得分:1)
您的想法是对的
if let actualNumber = Int(possibleNumber)
可能不是true,否则不分配值,因此出现错误,如果仅在其他内部分配它,则也会得到相同的错误,编译器需要确保该值不是nil,因为它不知道哪个块(是否存在)将在运行时运行,因此根据您的条件,您必须使用Int!
或Int?
,但是前者会导致如果值为nil
答案 1 :(得分:1)
无需初始化即可使用somevariable。因此,在第一个代码中,有可能到达else子句,从而不会初始化somevariable。 但是在第二种情况下,即使在else子句中,也会初始化somevariable并使其= 0。
这些代码也可以工作:
let possibleNumber = "1232"
var somevariable : Int?
if let actualNumber = Int(possibleNumber) {
somevariable = actualNumber
} else {
print("\(possibleNumber) could not be converted to an integer")
}
print(somevariable)
这:
let possibleNumber = "1232"
var somevariable : Int!
if let actualNumber = Int(possibleNumber) {
somevariable = actualNumber
} else {
print("\(possibleNumber) could not be converted to an integer")
}
print(somevariable)