假设我们有一个由
给出的自定义类型struct S {
let value_1: UInt = 1
let value_2: UInt = 2
}
我想使用强制转换创建一个Double
数组(例如[1.0,2.0]):
let s = S()
let a = s as Array<Double> // fails obviously
最终目标是致电
func aMethod(array: [Double]) { ... }
以便捷的方式:
let s = S()
aMethod(s)
我的第一个想法是使用
extension S {
// but how to continue here?
}
没有静态方法以优雅的方式解决这个问题的想法?
答案 0 :(得分:2)
您可以向Struct添加array
属性,例如:
struct S {
let value_1: UInt = 1
let value_2: UInt = 2
var array: [UInt] {
return [value_1, value_2]
}
}
let s = S()
let a = s.array // [1, 2]
扩展也有效:
struct S {
let value_1: UInt = 1
let value_2: UInt = 2
}
extension S {
var array: [UInt] {
return [value_1, value_2]
}
}
let s = S()
let a = s.array // [1, 2]
为什么不是协议:
protocol HasArray {
var value_1: UInt { get }
var value_2: UInt { get }
var array: [UInt] { get }
}
extension HasArray {
var array: [UInt] {
return [value_1, value_2]
}
}
struct S: HasArray {
let value_1: UInt = 1
let value_2: UInt = 2
}
let s = S()
let a = s.array // [1, 2]