可以投吨至comform在迅速

可以投吨至comform在迅速

问题描述:

协议我想使用SWIFT一般如下代码显示:可以投吨至comform在迅速

func handle<T>(data: Data, with type: T.Type) { 
    if type is B.Type { 
     handleOne(data: data, with: type) //error here: In argument type 'T.Type', 'T' does not conform to expected type 'B' 
     // cast T comform B? 
    } else { 
     handleTwo(data: data) 
    } 
} 

func handleOne<T>(data: Data, with type: T.Type) where T:B { 

} 

func handleTwo(data: Data) { 

} 

...

protocol B { 
    ... 
} 

B是一个协议,我可以打电话handleOnehandle ?可以铸造T通知B

+0

编译器**不**足够聪明,知道'如果类型是B.Type'是TRUE;然后类型实际上是'B'型。由于'B'类型是'handleOne'函数的一个要求,所以这会失败! – Honey

+0

我不这么认为,我在Xcode9 swift4中试过,使用'struct A:B {}','handle(data:Data(),with:A.self)'',如果type是B.Type'是'true',你可以试试这个 –

将类型作为参数传入是没有必要的,因为它可以从对象本身检索。该is类型检查操作的工作对象和检查的情况下,对类型名称:

protocol A {} 

protocol Data {} 

func handle (data: Data) { 
    if data is A { 
    print("Handled A.") 
    } else { 
    print("Handled something else.") 
    } 
} 

struct AStruct: Data, A {} 

handle(data: AStruct()) // Handled A. 
+0

在我的问题中,'handleOne'需要参数'.Type'。 –

+0

这应该工作:'FUNC处理(数据:T){ 如果数据是一个十 handleOne(数据:数据,具有:类型(:数据)) }其他{ 打印( “已处理别的事情。” ) } }' –

+0

您也可以使用T.self而不是type(of:data)。 –