3 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
對于使用類擴(kuò)展類型化數(shù)組,以下內(nèi)容對我有用(Swift 2.2)。例如,對類型化數(shù)組進(jìn)行排序:
class HighScoreEntry {
let score:Int
}
extension Array where Element:HighScoreEntry {
func sort() -> [HighScoreEntry] {
return sort { $0.score < $1.score }
}
}
試圖做到這一點(diǎn)與結(jié)構(gòu)或typealias會(huì)給出錯(cuò)誤:
Type 'Element' constrained to a non-protocol type 'HighScoreEntry'
更新:
要使用非類擴(kuò)展類型化數(shù)組,請使用以下方法:
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貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
嘗試了一段時(shí)間之后,解決方案似乎<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
}
}
現(xiàn)在可以按預(yù)期運(yùn)行,而不會(huì)出現(xiàn)構(gòu)建錯(cuò)誤:
["A","B","C"].find { $0.compare("A") > 0 }

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
擴(kuò)展所有類型:
extension Array where Element: Comparable {
// ...
}
擴(kuò)展一些類型:
extension Array where Element: Comparable & Hashable {
// ...
}
擴(kuò)展特定類型:
extension Array where Element == Int {
// ...
}
- 3 回答
- 0 關(guān)注
- 732 瀏覽
添加回答
舉報(bào)