通用符合协议数组

时间:2017-02-27 13:15:22

标签: arrays swift generics protocols

对于符合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]'总是   失败

我该如何处理这个案子?

1 个答案:

答案 0 :(得分:0)

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

//: 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)