2016-07-22 1 views
0
extension Array where Element: StringLiteralConvertible{ 

    func spliteByPrefix() -> [Element]{ 

     for item in self{ 

     } 

     return [] 
    } 

} 

Je souhaite écrire une extension de Array dont l'élément est toujours une chaîne. Et dans ma fonction spliteByPrefix(), je veux utiliser peut-être item.characters ou quelque chose d'autre qui a une chaîne. Comment?Extension Swift Array avec le type d'élément déterminé

Répondre

1

Pour l'instant, vous ne pouvez pas écrire une extension de Array « dont Element est toujours un String » à Swift.

Mais vous pouvez écrire une extension qui a presque la même fonctionnalité.

Écrivez votre propre protocole, qui String peut se conformer à:

protocol MyStringType { 
    var characters: String.CharacterView { get } 

    //You may need some other properties or methods to write your extension... 
} 
// Make `String` the only type conforming to `MyStringType`. 
extension String: MyStringType {} 

Et écrire une extension où Element est conforme au protocole.

extension Array where Element: MyStringType { 

    func spliteByPrefix() -> [Element]{ //You really want to return, `Array<Element>`? 
     for item in self { 
      for ch in item.characters { 
       //Do something with `ch`. 
       _ = ch 
      } 
     } 
     return [] 
    } 

} 
0

Dans cet exemple Element est toujours un Int. J'utiliser eux-mêmes les éléments du tableau

extension Array where Element: IntegerType { 
    func toString() -> [String] { 
     var result = [String]() 
     for value in self { 
      result.append(String(value)) 
     } 
     return result; 
    } 
} 

Exemple d'utilisation:

let numberInt = [23, 10, 79, 3] 
let numberString = numberInt.toString() 
+0

Notez que tout type peut adopter StringLiteralConvertible, voir http://nshipster.com/swift-literal-convertible/ pour certains exemples. –

+0

Merci @MartinR pour votre commentaire, j'ai mis à jour le code Je pense que StringLiteralConvertible n'était pas un bon choix – David

+0

Avez-vous vérifié si cela compile? –