迅速に配列を拡張するにはどうすればよいですか?
私は言いたい
extension Array
{
func pop() -> AnyObject
{
let out = self.last
self.removeLast()
return out
}
}
コンパイラはself.removeLast()を好きではない、または返す
回答:
回答№1は1@ i40Westが指摘するように、 removeLast
は 本質的にポップ。つまり、元のコードでコンパイラの問題を修正したい場合は、次のようにします。
配列にクラス参照が含まれていない可能性があります
AnyObject
動作しません。あなたはそれをAny
(クラス、構造体、または列挙型を含むことができます)を返しますが、Element
これは、Array
それが実際に含んでいるもののためのタイプリアーゼ。self.last
オプション(配列が空の場合)を返します。オプションの返品をすることもできますpop
に似ているlast
、または配列が空の場合にだけアサートする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!
}
}
回答№2の場合は0
私はあなたがAnyObjectを使うべきだと思っていません。 試してください:
拡張配列 { func pop() - > T { let = self.last self.removeLast() 戻る } }