具有确定元素类型的Swift数组扩展

时间:2016-07-22 09:50:21

标签: swift swift-protocols swift-extensions

extension Array where Element: StringLiteralConvertible{

    func spliteByPrefix() -> [Element]{

        for item in self{

        }

        return []
    }

}

我想写一个Array的扩展,其Element总是一个String。在我的spliteByPrefix()函数中,我想使用item.characters或String所具有的其他东西。怎么样?

2 个答案:

答案 0 :(得分:1)

目前,您无法在Swift中编写ArrayElement始终为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 []
    }

}

答案 1 :(得分:0)

在此示例中,$(window).bind('beforeunload', function () { return 'Your custom message here'; }); 始终为Element。我使用数组的元素本身

Int

使用示例:

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