3 回答
TA贡献1853条经验 获得超9个赞
对于使用类扩展类型化数组,以下内容对我有用(Swift 2.2)。例如,对类型化数组进行排序:
class HighScoreEntry {
let score:Int
}
extension Array where Element:HighScoreEntry {
func sort() -> [HighScoreEntry] {
return sort { $0.score < $1.score }
}
}
试图做到这一点与结构或typealias会给出错误:
Type 'Element' constrained to a non-protocol type 'HighScoreEntry'
更新:
要使用非类扩展类型化数组,请使用以下方法:
typealias HighScoreEntry = (Int)
extension SequenceType where Generator.Element == HighScoreEntry {
func sort() -> [HighScoreEntry] {
return sort { $0 < $1 }
}
}
在Swift 3中,某些类型已重命名:
extension Sequence where Iterator.Element == HighScoreEntry
{
// ...
}
TA贡献1829条经验 获得超7个赞
尝试了一段时间之后,解决方案似乎<T>从签名中删除了,例如:
extension Array {
func find(fn: (T) -> Bool) -> [T] {
var to = [T]()
for x in self {
let t = x as T;
if fn(t) {
to += t
}
}
return to
}
}
现在可以按预期运行,而不会出现构建错误:
["A","B","C"].find { $0.compare("A") > 0 }
TA贡献1797条经验 获得超6个赞
扩展所有类型:
extension Array where Element: Comparable {
// ...
}
扩展一些类型:
extension Array where Element: Comparable & Hashable {
// ...
}
扩展特定类型:
extension Array where Element == Int {
// ...
}
- 3 回答
- 0 关注
- 483 浏览
添加回答
举报