在Swift

时间:2015-10-12 09:54:36

标签: swift casting

假设我们有一个由

给出的自定义类型
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?
}

没有静态方法以优雅的方式解决这个问题的想法?

1 个答案:

答案 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]