如何将包含的强制值转换为包含的可选值?

时间:2014-11-23 11:42:23

标签: xcode swift type-conversion optional optional-values

将可选值转换为强制值非常简单:

    var aString: String? = "Hello"

    var anotherString: String = aString!

在相反的方向上它更简单,因为没有展开:

    var myString: String = "Hello"

    var myOtherString: String? = myString

将包含可选值的强制值数组转换为包含强制值的强制值数组会有点复杂:

    var anArray: Array<String?> = ["Hello"]

    var anotherArray: Array<String> = anArray as Array<String>

这里的一点点不同之处在于,您不需要!来打开价值。你只是告诉它期待什么类型。

在这里,我被卡住了。对我来说,反过来应该是这样的:

    var myArray: Array<String> = ["Hello"]

    var myOtherArray: Array<String?> = myArray as Array<String?>

但这会产生错误:

  

&#39;字符串&#39;与&#39; String?&#39;

不同

简单地说,它给出了同样的错误:

var myOtherArray:Array = myArray

我以为我对此很了解,但现在我不确定。如何将包含的强制值转换为包含的可选值(缺少使用休闲for循环)?

娱乐for-loop(不理想):

    var myArray: Array<String> = ["Hello"]

    var myOtherArray: Array<String?> = []

    for loopString: String in myArray {
        myOtherArray.append(loopString)
    }

1 个答案:

答案 0 :(得分:1)

您必须通过将每个元素转换为可选元素来创建新数组。 但是,您可以使用map()

而不是for循环
var myArray = ["Hello"]
var myOtherArray = map(anotherArray) { Optional($0) }
println(myOtherArray) // [Optional("Hello")]

你的转换方法

var anArray: Array<String?> = ["Hello"]
var anotherArray: Array<String> = anArray as Array<String>

中止
fatal error: can't unsafeBitCast between types of different sizes

在我目前的Xcode 6.1中。在这里使用map()有效:

var anArray: Array<String?> = ["Hello"]
var anotherArray = map(anArray) { $0! }
println(anotherArray) // [Hello]

(当然,如果任何数组元素为nil,这将在运行时中止。)