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

问题描述

我正在尝试使用Swift属性创建Protocol Variadic。根据文档,可以在一个函数中做到这一点:

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 }
}

导致此错误

enter image description here

是否无法在Variadic内创建Protocol属性

解决方法

是否无法在协议中创建可变参数属性?

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

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

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

因此,只需声明变量的类型为[ProductModel]。那就是你怎么说“ ProductModel对象的一些未知数”。实际上,这就是可变参数表示法的全部含义,因为参数是作为数组接收在函数体内的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...