2017-07-29 6 views
1

0番目のインデックスで配列に常に0を挿入したい、配列に拡張子を書き込もうとしています。しかし、のようないくつかのエラーを与える:タイプの引数リストとSwift 3配列の拡張エラー

呼び出すことができません '挿入' '(時のInt、:INT)'

は、ここに私のコードです

extension Array { 
    mutating func printWithZero() -> Array 
    { 
     self.insert(0, at: 0) 
     return self 
    } 
} 

答えて

7

拡張は、定義したとおり、すべてのタイプの配列に適用されます。残念ながら、いずれの配列にも0を挿入することはできません。たとえば、[String]0を挿入することはできません。

この拡張機能は、整数リテラル0を含むことができる配列でのみ動作する必要があります。

extension Array where Element: ExpressibleByIntegerLiteral { 
    mutating func printWithZero() -> Array 
    { 
     self.insert(0, at: 0) 
     return self 
    } 
} 

例:あなたはタイプがExpressibleByIntegerLiteralであることを指定する配列のElement種類に制約を追加することによってこれを行うことができます

var a = [1, 2, 3] 
let b = a.printWithZero() 

print(a) // [0, 1, 2, 3] 
print(b) // [0, 1, 2, 3] 

// Works with an array of Doubles too 

var c = [1.5, 2.5, 3.5] 
let d = c.printWithZero() 

print(c) // [0, 1.5, 2.5, 3.5] 
print(d) // [0, 1.5, 2.5, 3.5] 
0

が、私はこの単純なコードを使用することになり、拡張子なし - スウィフトを3:

var myArray = [1,2,3] 
myArray.insert(0, at: 0) 

print(myArray) // [0,1,2,3]