3 回答

TA貢獻1772條經驗 獲得超5個贊
對于使用類擴展類型化數組,以下內容對我有用(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貢獻1757條經驗 獲得超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貢獻1804條經驗 獲得超2個贊
擴展所有類型:
extension Array where Element: Comparable {
// ...
}
擴展一些類型:
extension Array where Element: Comparable & Hashable {
// ...
}
擴展特定類型:
extension Array where Element == Int {
// ...
}
- 3 回答
- 0 關注
- 727 瀏覽
添加回答
舉報