Swift可选类型的想法

时间:2018-08-05 19:03:08

标签: ios swift type-safety optional-arguments

我有一个问题:“我想它为什么起作用,但是我应该在这里要求它检查我的想法: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 为零的情况,因为他的类型不是可选的。

也许我的想法是错误的,或者您有更好的解释。感谢您的帮助和良好的链接。 祝你好运!

2 个答案:

答案 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)