【问题标题】:Swift optional types thoughtsSwift 可选类型的想法
【发布时间】:2019-01-12 19:26:34
【问题描述】:

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

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

【问题讨论】:

  • 这就是为什么你在 Swift 中有可选项。如果您假装有一个可以为 nil 的变量,请将其声明为可选整数 Int?

标签: ios swift type-safety optional-arguments


【解决方案1】:

你的想法是对的

if let actualNumber = Int(possibleNumber)

有可能不是真的,因为 else 没有赋值,因此错误,如果你只在 else 中赋值,你也会得到同样的错误,编译器需要确保值不是 nil ,因为它不知道哪个块( if 或 else )将在运行时运行,因此根据您的条件,您必须使用 Int!Int? ,但如果值前者会导致崩溃是nil

【讨论】:

    【解决方案2】:

    在没有初始化的情况下使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-12
      • 2017-03-29
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多