/ /迅速に配列にpop()拡張を追加するには? - スウィフト

素早くArrayにpop()拡張を追加するには? - スウィフト

迅速に配列を拡張するにはどうすればよいですか?

私は言いたい

extension Array
{
func pop() -> AnyObject
{
let out = self.last
self.removeLast()
return out
}
}

コンパイラはself.removeLast()を好きではない、または返す

回答:

回答№1は1

@ i40Westが指摘するように、 removeLast 本質的にポップ。つまり、元のコードでコンパイラの問題を修正したい場合は、次のようにします。

  1. 配列にクラス参照が含まれていない可能性があります AnyObject 動作しません。あなたはそれを Any (クラス、構造体、または列挙型を含むことができます)を返しますが、 Elementこれは、 Array それが実際に含んでいるもののためのタイプリアーゼ。

  2. self.last オプション(配列が空の場合)を返します。オプションの返品をすることもできます pop に似ている last、または配列が空の場合にだけアサートする removeLast.

  3. 以来 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!
}
}

回答№2の場合は0

私はあなたがAnyObjectを使うべきだと思っていません。 試してください:


拡張配列 { func pop() - > T { let = self.last self.removeLast() 戻る } }