具有确定的元素类型的Swift数组扩展
问题描述:
extension Array where Element: StringLiteralConvertible{
func spliteByPrefix() -> [Element]{
for item in self{
}
return []
}
}
我想编写其元素始终是字符串的Array的扩展。而在我的spliteByPrefix()函数中,我想使用可能的item.characters或其他字符串所具有的其他东西。怎么样?具有确定的元素类型的Swift数组扩展
答
至于现在,您无法在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 []
}
}
答
在这个例子中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()
注意,任何类型的可以采用StringLiteralConvertible,见http://nshipster.com/swift-literal-convertible/对于一些例子。 –
感谢@MartinR的评论,我更新了代码我认为StringLiteralConvertible不是一个正确的选择 – David
您是否检查过编译? –