Apple Swift:类型转换泛型

我正在编写一些Swift代码,其中有一个包含通用类型的数组:

let _data: Array<T> = T[]()

稍后在我的代码中,我需要确定存储在数组中的类型。我尝试使用文档中描述的类型转换技术(尽管泛型没有使用过)。

switch self._data {

case let doubleData as Array<Double>:

// Do something with doubleData

case let floatData as Array<Float>:

// Do something with floatData

default:

return nil // If the data type is unknown return nil

}

上面的switch语句在编译时导致以下错误:

  1. 发出IR SIL功能@ _TFC19Adder_Example fGS0_Q__FT_GSqGS0_Q___以便在/code.viperscience/Adder/src/Adder

    Library / Matrix.swift:45:3:0的’transpose’错误:无法执行命令:分段错误:11:0:错误: swift

    frontend命令由于信号失败(使用-

    v查看调用)命令/Applications/Xcode6-Beta2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift失败,退出代码254

有人知道我可以将通用数据转换为实际类型以采取特定措施吗?

回答:

假设您有一系列按钮:

let views: [NSView] = [NSButton(), NSButton(), NSButton()]

您可以使用以下强制转换:

let viewsAreButtons = views is [NSButton]  // returns true

let buttonsForSure = views as! [NSButton] // crashes if you are wrong

let buttonsMaybe = views as? [NSButton] // optionally set

如果您尝试在如下所示的开关盒中使用,它将无法正常工作。编译器(Swift 1.2 Xcode

6.3b1)说:“不能使用[NSButton]类型的下行模式。”

switch views {

case let buttons as [NSButton]:

println("Buttons")

default:

println("something else")

}

称之为限制。用例归档雷达。Swift团队真的很想听听反馈。如果您真的想使其工作,可以定义自己的模式匹配运算符。在这种情况下,将是这样的:

struct ButtonArray { }

let isButtonArray = ButtonArray()

func ~=(pattern: ButtonArray, value: [NSView]) -> Bool {

return value is [NSButton]

}

然后工作:

switch views {

case isButtonArray:

println("Buttons") // This gets printed.

default:

println("something else")

}

在操场上尝试一下。希望能帮助到你!

以上是 Apple Swift:类型转换泛型 的全部内容, 来源链接: utcz.com/qa/415367.html

回到顶部