首页 > 解决方案 > 具有可变参数属性的 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 }
}

导致此错误: 在此处输入图像描述

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

标签: swiftprotocolsswift5variadic

解决方案


不能在协议中创建可变参数属性吗?

这是不可能的,但这只是一个更大事实的反映,即可变参数不是类型。您在这里想说products的是 Variadic ProductModel 类型。但是没有这种类型。任何变量都不能被声明为该类型;它不仅仅是协议。

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

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

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


推荐阅读