' [双?]'不可转换为' [Double]'

时间:2015-12-08 04:58:50

标签: ios swift casting optional

也许问题是如此愚蠢,但我是iOS中的新人 如何将可选数据转换为非可选数据数组

  

[Double?]无法转换为[Double]

这是错误的行

   let massive = [dictionary[j]![one]?.doubleValue] as [Double]

我正在转换为[Double],因为我在这里使用它

let dataEntry = BarChartDataEntry(values: massive, xIndex: c)

它会抛出错误

  

无法为类型' BarChartDataEntry'调用初始值设定项。与   类型'的参数列表(值:[Double?],xIndex:Int)'

类BarChartDataEntry的构造函数就是那个

public init(values: [Double], xIndex: Int)

2 个答案:

答案 0 :(得分:2)

[Double?]被包裹,您需要打开它才能将其用作[Double]。为了更好地理解,请看看你的双打包裹着什么:

enum Optional<T> {
    case None // has no value
    case Some(T) // has some value 
}

所以你需要打开你的选项,以便将它们用作非选项[Double]。

一个选项是,您可以对可选阵列执行flatMap操作,将[Double?]转换为[Double]。请记住,flatMap会复制你的数组并替换它,所以如果你在一个非常大的数组上执行flatMap,你可能会遇到问题。

这是一个操场就绪的例子:

var dubs : [Double?] = [1.2,1.4]

print(dubs) // [{Some 1.2}, {Some 1.4}]

var newDubs = dubs.flatMap { dub in
    return dub
}

print(newDubs) // [1.2, 1.4]

答案 1 :(得分:0)

这取决于你的双倍价值。在这种情况下,您必须确保它有一个小数点,并且不是0.0。在这种情况下,您可以将代码设为

//your code
... = Double[...]

它应该解决。否则,请提供一些代码,以便我建议一种解决方法。希望这适合你:)