如何在swift中擴展數組?如何在swift中將pop()擴展添加到Array?
我想說
extension Array
{
func pop() -> AnyObject
{
let out = self.last
self.removeLast()
return out
}
}
但是編譯器不喜歡self.removeLast()或返回了
如何在swift中擴展數組?如何在swift中將pop()擴展添加到Array?
我想說
extension Array
{
func pop() -> AnyObject
{
let out = self.last
self.removeLast()
return out
}
}
但是編譯器不喜歡self.removeLast()或返回了
我不認爲你應該使用AnyObject。你有沒有學過泛型? 嘗試:
extension Array { func pop() -> T { let out = self.last self.removeLast() return out } }
正如@ i40West指出,removeLast
是本質上彈出。這就是說,如果你想與原代碼修正編譯器會發出:
數組可能不包含類引用,以便AnyObject
是行不通的。你可以用Any
(它可以包含類,結構或枚舉)替換它,但最好返回一個Element
,這是Array
實例爲其實際包含的任何內容輸入的值。
self.last
返回一個可選的(如果數組爲空)。您可以選擇從類似於last
的pop
返回一個可選項,或者只是在與removeLast
類似的陣列爲空時斷言。
由於pop
正在修改self
(它刪除的條目)和Array
是一個結構,你需要標記功能mutating
。
,所以該完整版,假設removeLast
沒有返回值,可能是這樣的:
extension Array {
mutating func pop() -> Element {
precondition(self.startIndex != self.endIndex, "Attempt to pop from an empty array")
let out = self.last
self.removeLast()
return out!
}
}
我只是複製了到操場,正如你所說的編譯器卻高興不起來。 ..但是當我重新輸入這條線時很好。我看到的唯一問題是,如果列表有多個類型,你可以安全地轉換返回值嗎? – chris 2014-12-19 02:27:45
removeLast()已經返回它刪除的值。你不必將它保存在一個臨時變量或任何東西中。你的pop()在功能上等同於removeLast()。 – i40west 2014-12-19 02:36:09
謝謝i40west !!! – 2014-12-19 02:50:43