Swift 可变参数协议 属性

Swift Protocol with Variadic property

我正在尝试用 Variadic 属性 创建 Swift Protocol。根据文档,可以在函数中执行此操作:

func arithmeticMean(_ numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)

但是尝试在如下协议中创建 Variadic 参数:

struct ProductModel {
    
}

protocol SubscriptionModel {
    var products: ProductModel... { get set }
}

导致此错误:

是否无法在 Protocol 中创建 Variadic 属性?

Is it not possible to create a Variadic property within a Protocol?

这是不可能的,但这只是一个更大事实的一个反映,即可变参数不是类型。您在这里试图说 products 是 Variadic ProductModel 类型。但是没有这样的类型。没有变量 ever 可以声明为该类型;它不仅仅是协议。

可变参数 notation 唯一可能出现的地方是作为实际 func 声明中的参数类型,但它只是一个符号,而不是类型。这是一种说法,该函数可以采用一系列实际类型(Double,在文档中的示例中)。

因此,如果您的协议想要声明一个带有可变参数的 方法 ,那很好。但是可变类型的变量的想法是没有意义的。

所以只要声明你的变量类型是[ProductModel]。这就是您所说的“一些未知数量的 ProductModel 对象”。这就是可变参数符号的全部含义,真的,因为参数是作为数组在函数体内接收的。