2017-02-27 45 views
0

一个独特的对象符合一个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

'T'是一个通用参数吗?如果是,你有没有考虑添加通用约束? – Sweeper

+0

是的,它是一个通用的参数,不,我没有 – Pierre

+0

“*测试[ModelProtocol]协议*”的一致性是什么意思? '[ModelProtocol]'是一个数组,而不是一个协议。你的意思是你想检查'T'是否是'[ModelProtocol]'? – Hamish

回答

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)