swift - 根据可选案例值切换测试非可选

标签 swift

我知道可以按照以下问题中的描述测试可选与可选:Swift: testing against optional value in switch case

但我想做的是用可选大小写值测试一个非可选值:

    switch nonOptionalView{
    case optionalView1:
        // Do something

    case optionalView2:
        // Do something else

    }

Xcode 返回错误“可选 xxx 的值未展开” 如果我加一个“?”在 case 语句的末尾,我得到“?模式无法匹配‘UIView’类型的值”

最佳答案

目前 Swift 标准库不支持模式匹配可选值。但是,您可以使用 if/else if 语句轻松执行您的逻辑:

if nonOptionalView === optionalView1 {
    // Do something
} else if nonOptionalView === optionalView2 {
    // Do something else
}

如果你真的希望能够模式匹配可选值,你可以使用 operator overloading .要重载模式匹配运算符 ~=,请将以下代码放入您的项目中:

public func ~=<T : Equatable>(a: T?, b: T?) -> Bool {
    return a == b
}

现在您将能够很好地匹配可选值:

switch nonOptionalView {
case optionalView1:
    // Do something
case optionalView2:
    // Do something else
default:
    // Handle default case
}

关于swift - 根据可选案例值切换测试非可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32234375/

相关文章:

swift - 重新排序 UITableView 单元格并跟踪索引

swift - 本地化和自动布局

swift - 如何在Xcode中调试 “precondition failure”?

ios - 自定义 UIView 警告

ios - 如何在 iOS 和 WatchKit 中更改图像 tintColor

ios - admob 广告被关闭后执行 segue

iOS 如何检查三个 Sprite 是否接触

ios - ARC 中的系统对象委托(delegate)是否需要设置为 nil?

ios - 如何在 Swift 中保存一次整数?

ios - App Store 的应用内购买可以退款吗?