【发布时间】:2017-09-20 20:35:56
【问题描述】:
我编写了一个扩展程序,可以在 Collection 中搜索特定类型的对象。
extension Collection {
/// Finds and returns the first element matching the specified type or nil.
func findType<T>(_ type: T.Type) -> Iterator.Element? {
if let index = (index { (element: Iterator.Element) in
String(describing: type(of: element)) == String(describing: type) }) {
return self[index]
}
return nil
}
}
现在在 Xcode 9 / Swift 4 中,sn-p type(of: element)) 带有错误下划线
非标称类型 'T' 不支持显式初始化
这个错误很奇怪,因为我没有初始化一个对象。
这个答案https://stackoverflow.com/a/46114847/2854041 表明这可能是一个类型问题 - Swift 4 中的 String(describing:) 初始化程序是否发生了变化?
【问题讨论】:
-
为什么
String(describing: type(of: element)) == String(describing: type)可以直接比较类型变量,还有is可以检查类型呢?