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

    func spliteByPrefix() -> [Element]{ 

     for item in self{ 

     } 

     return [] 
    } 

} 

要素が常に文字列であるArrayの拡張を書きたいと思います。そして、私のspliteByPrefix()関数では、item.charactersなどの文字列を使用したいと考えています。どうやって?決定された要素タイプを持つSwift配列拡張

答えて

1

今のところ、SwiftにはArrayの「Elementが常にStringです」という拡張子を書くことはできません。

しかし、ほとんど同じ機能を持つ拡張機能を書くことができます。

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 {} 

そしてElementは、プロトコルに準拠拡張子を書く:

Stringが準拠することができ、独自のプロトコルを、書きます。この例Element

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

常にIntです。いくつかのためにどのようなタイプがStringLiteralConvertibleを採用できることを

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

注、参照http://nshipster.com/swift-literal-convertible/:私は、使用の配列

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

例の要素自体を使用します例。 –

+0

あなたのコメントのために@MartinRに感謝しました。私はStringLiteralConvertibleが正しい選択ではないと思うコードを更新しました。 – David

+0

コンパイルしているかどうかチェックしましたか? –

関連する問題