您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Apple Swift:类型转换泛型

Apple Swift:类型转换泛型

假设您有一系列按钮:

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")
}

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

Swift 2022/1/1 18:17:17 有361人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶