swift - 具有可变参数属性的 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
吗?
解决方案
不能在协议中创建可变参数属性吗?
这是不可能的,但这只是一个更大事实的反映,即可变参数不是类型。您在这里想说products
的是 Variadic ProductModel 类型。但是没有这种类型。任何变量都不能被声明为该类型;它不仅仅是协议。
可变参数符号可能出现的唯一位置是在实际声明中作为参数类型func
,但它只是一个符号,而不是类型。这是一种说法,该函数可以采用一系列实际类型(Double,在您的示例中来自文档)。
所以,如果你的协议想要声明一个带有可变参数的方法,很好。但是可变参数类型的变量的想法是没有意义的。
所以只需声明变量的类型是[ProductModel]
. 这就是你所说的“一些未知数量的 ProductModel 对象”。这就是可变参数符号的全部含义,真的,因为参数是在函数体内作为数组接收的。
推荐阅读
- javascript - 如何在javascript中执行动态字符串?
- c++ - 0-1 背包问题的用户定义输入
- java - Neo4j Java 驱动程序 - 连接池
- mysql - 为什么它不能反过来工作?SQL
- sql - 如何在没有选择语句的情况下在 SQL Server 表中插入一些值(例如,从我自己创建的变量中)
- sql - 寻找在选择语句中执行是/否查询检查的最佳方法
- scala - 在 Play 中测试对 akka 演员的调用
- c# - 在 Linux .NET Core 上发布 Windows 服务
- html - 使css文件影响Angular 9中的每个不同部分
- flutter - 让 Flutter Web Sentry 错误报告可读?