【问题标题】:Swift optional binding with check for several types带有检查多种类型的 Swift 可选绑定
【发布时间】:2018-05-20 03:32:51
【问题描述】:

我的班级模型可能是 2 个不同班级的实例。现在我检查该模型是我需要的类:

 guard let unwrappedModel = store.state.navigationState.getRouteSpecificState(store.state.navigationState.route) as myClassOne? else {
                assertionFailure("Wrong model for RetailSalesVC")
                return
            }

现在我想检查模型是一类还是二类。有可能实现吗?

现在我得到了这个(但没有可选绑定):

   guard (((store.state.navigationState.getRouteSpecificState(store.state.navigationState.route) as MyClassOne?) != nil)) ||
            (((store.state.navigationState.getRouteSpecificState(store.state.navigationState.route) as MyClassTwo?) != nil)) else {
                assertionFailure("Wrong model for \(self)")
                return
        }

【问题讨论】:

  • 你在浪费太多的括号????
  • 如果您只知道 unwrappedModel 是 MyClassOne MyClassTwo,您将如何使用它? – 您可能想要定义一个可以匹配的通用协议
  • @vadian 我承认这看起来很丑)
  • @MartinR 他们实际上确实有共同的协议,但该协议在其他类之间共享不适合这里。所以,我想和他们一起工作,就像我想使用特定的协议一样,但我不希望其他类通过。

标签: swift


【解决方案1】:

如果你想运行它,这里有一个例子:

class ModelOne {}
class ModelTwo {}

let testObjects : [Any] = [ModelOne.init(), ModelTwo.init(), NSCoder.init()]
for obj in  testObjects {
    if  (obj is ModelOne || obj is ModelTwo) {
        print("\(obj) passes")
    }else{
        print("\(obj) fails")
    }
}

应该给出以下输出:

main.ModelOne passes
main.ModelTwo passes 
<NSCoder: 0x7f93a0c02b40> fails

【讨论】:

  • 并没有真正做我想做的事,我想做如果让构造但检查不同的类型,而不仅仅是一个。
【解决方案2】:

试试这个

if let unwrappedModel = store.state.navigationState.getRouteSpecificState(store.state.navigationState.route){
    if unwrappedModel is MyClassOne{
        print("MyClassOne")
    }
    else if unwrappedModel is MyClassTwo{
        print("MyClassTwo")
    }
}

【讨论】:

    【解决方案3】:
        if unwrappedModel is ClassOne{
            print("this model is of type ClassOne")
        }
        else if unwrappedModel is ClassTwo{
            print("this model is of type ClassTwo")
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2015-09-29
      • 2021-11-24
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多