对于符合ModelProtocol协议的唯一对象,我可以通过编写以下代码来测试泛型是否成功:

if let _ = T.self as? ModelProtocol.Type { /* Do some stuff */}


但是,如果需要测试[ModelProtocol]协议的一致性,我会备货充足。我试过了 :

if let _ = T.self as? [ModelProtocol.Type] { /* Do some stuff */}


但是Xcode给我一个警告:


  始终从“ T.Type”强制转换为无关类型“ [ModelProtocol.Type]”
  失败


我应该如何处理这种情况?

最佳答案

您可以使用带有约束的通用函数来执行此操作。例如:

//: Playground - noun: a place where people can play

import Cocoa

protocol ModelProtocol {
    var name: String { get }
}

struct Model: ModelProtocol {
    let name: String
}

func myFunction<T: Sequence>(sequence: T) where T.Iterator.Element == ModelProtocol {
    for model in sequence {
        print(model.name)
    }
}

let models: [ModelProtocol] = [Model(name: "one"), Model(name: "two")]
myFunction(sequence: models)

关于arrays - 通用符合协议(protocol)数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42486744/

10-09 06:18