Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么需要展开此变量?_Ios_Xcode_Swift - Fatal编程技术网

Ios 为什么需要展开此变量?

Ios 为什么需要展开此变量?,ios,xcode,swift,Ios,Xcode,Swift,我是swift新手,但我有很多编程经验。然而,在Swift中处理未知时,我从未遇到过类似变量“wrapping”的情况 我有一个静态函数random,它返回一个方向。定向类没有任何可选内容。但是,我必须在随机函数中的return语句上使用感叹号 为什么会这样?请原谅我对swift完全缺乏了解。好吧,很明显初始化器可能会失败。让我们假设: import SpriteKit let NumOrientations: UInt32 = 4 enum Orientation: Int, Printa

我是swift新手,但我有很多编程经验。然而,在Swift中处理未知时,我从未遇到过类似变量“wrapping”的情况

我有一个静态函数random,它返回一个方向。定向类没有任何可选内容。但是,我必须在随机函数中的return语句上使用感叹号


为什么会这样?请原谅我对swift完全缺乏了解。

好吧,很明显初始化器可能会失败。让我们假设:

import SpriteKit

let NumOrientations: UInt32 = 4

enum Orientation: Int, Printable {
case Zero = 0, Ninety, OneEighty, TwoSeventy

var description: String {
    switch self {
        case .Zero:
            return "0"
        case .Ninety:
            return "90"
        case .OneEighty:
            return "180"
        case .TwoSeventy:
            return "270"
    }
}

static func random() -> Orientation {
    return Orientation(rawValue: Int(arc4random_uniform(NumOrientations)))!
}
}
这在枚举中找不到值,那么您希望它返回什么?它将返回
nil
。这意味着返回值必须是可选的,因为可以返回
nil

这在从原始值初始化的枚举中明确提到:

原始值初始值设定项是一个可失败的初始值设定项,因为不是每个原始值都将返回枚举成员。有关更多信息,请参阅故障初始化器

但是,在这种情况下(方法
random
),您肯定不会返回
nil
,因此最好的解决方案是在从
random
返回可选项之前先将其展开

Orientation(rawValue: 10)