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 对象”。这就是可变参数符号的全部含义,真的,因为参数是作为数组在函数体内接收的。
我正在尝试用 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 对象”。这就是可变参数符号的全部含义,真的,因为参数是作为数组在函数体内接收的。