gpt4 book ai didi

具有可变参数属性的 Swift 协议(protocol)

转载 作者:行者123 更新时间:2023-12-05 01:10:10 25 4
gpt4 key购买 nike

我正在尝试使用 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)

但尝试在如下协议(protocol)中创建 Variadic 参数:

struct ProductModel {

}

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

导致此错误: enter image description here

难道不能在 Protocol 中创建 Variadic 属性吗?

最佳答案

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

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

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

所以,如果你的协议(protocol)想要声明一个带有可变参数的方法,没问题。但是可变参数类型的变量的想法是没有意义的。

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

关于具有可变参数属性的 Swift 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64406386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com