假设您有一系列按钮:
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")
}
在操场上尝试一下。希望能帮助到你!