我想使用扩展程序在swift中向init
类添加自定义Array
方法,但关键是我只想将其添加到数组中bytes(UInt8
)
我现在有这样的事情:
public class MyData {
}
public func toByteArray(myData: MyData) -> [UInt8]? { // a global function
// code to check if myData is valid, and extract byte array
}
似乎更多" swifty"要做的是使用一个可用的初始化程序,所以我想像这样写
extension Array where Element : UInt8 {
init?(myData: MyData) {
// code to check if myData is valid, and extract byte array
}
}
此代码无法编译,我得到Type 'Element' constrained to a non-protocol type 'UInt8'
我发现other things您没有扩展数组,而是扩展_ArrayType,但这似乎并不适用于初始化程序
答案 0 :(得分:0)
实现这一目标的唯一方法是Swift 2.2是制作一个UInt8符合的协议,并将其作为约束用于Array扩展。
protocol UInt8Protocol {}
extension UInt8 : UInt8Protocol {}
extension Array where Element : UInt8Protocol {
init?(myData: MyData) {
...
}
}
在Swift进化列表中提到,这个(使用相同类型约束的约束扩展)是一个高度请求的特性。它可能是Swift的下一个版本之一。