微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有可变参数属性的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 }
}

导致此错误

enter image description here

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

解决方法

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。