2016-07-22 65 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”的扩展名。

但是你可以写一些扩展,它具有几乎相同的功能。

自己写的协议,该协议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符合协议的扩展。

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

在这个例子中Element始终是一个Int。我用的元件本身的阵列使用的

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

例:

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

注意,任何类型的可以采用StringLiteralConvertible,见http://nshipster.com/swift-literal-convertible/对于一些例子。 –

+0

感谢@MartinR的评论,我更新了代码我认为StringLiteralConvertible不是一个正确的选择 – David

+0

您是否检查过编译? –

相关问题