2016-11-04 17 views
1

Optionalを拡張したいと思います。Wrappedは配列(要素の種類はすべて)です。つまり、[Any]?に関数を追加したいと思います。私はそれをどう宣言するか分かりません。私が試した:Swift:オプションの配列を拡張する

1.

extension Optional where Wrapped: Array 

結果をに:

error: reference to generic type 'Array' requires arguments in <...> 

2.

extension Optional where Wrapped: Array<Any> 

結果に:

type 'Wrapped' constrained to non-protocol type 'Array<Any>' 

および他の同様の宣言を含む。ヘルプは高く評価されます。

+2

この拡張機能は、正確に、何でしょうか?つまり、どの機能を '[Any]? 'にだけ追加したいのですか? – matt

+0

1)配列がnilでない場合に要素を追加し、2)初期化する便利な関数を追加したいと思います。配列がnilの場合は要素だけの配列。 – Connor

+2

@ConnorNeville 'array =(array ?? [])+ [element]'を意味しますか?実際には拡張機能に値するものではないIMO(これを機能させるには回避策を検討する必要があります)。 – Hamish

答えて

1

はいここでの問題は、この行では、

extension Optional where Wrapped: Array<Any> 

「アレイ」は、より一般的な方法で、プロトコルでなければならないことである:私が得た

extension Type where Element: Protocol 

ソリューションは醜いですが、

protocol ArrayOfAny {} 
struct ArrayAny<Element: Any>: ArrayOfAny { 
    let array: [Element] 
    init(_ array: [Element]) { 
     self.array = array 
    } 
}  

このため:

012作品が、このことを考えます
extension Array: ArrayOfAny where Element: Any {} 

が...

がサポートされていない、あなたはこれを行うことができます。

extension Optional where Wrapped: ArrayOfAny 

はそれが役に立てば幸い:)

関連する問題