作者:_cristal_500 | 来源:互联网 | 2023-02-02 20:51
我一直收到这个错误,我不明白为什么.
错误:在结构中委派初始化程序没有标记为"方便"
这就是我所拥有的(作为例子),a DeprecatedCurrency
和a SupportedCurrency
.
struct DeprecatedCurrency {
let code: String
}
struct SupportedCurrency {
let code: String
}
然后,我想添加一个便利初始化函数,用于从已弃用的货币对象转换为新的货币对象.这就是我所拥有的:
struct DeprecatedCurrency {
let code: String
}
struct SupportedCurrency {
let code: String
convenience init(_ currecny: DeprecatedCurrency) { // error!!
self.init(code: currecny.code)
}
init(code: String) {
self.code = code
}
}
这个错误甚至意味着什么,我该如何解决?
我知道如果我们不提供默认初始化程序,init(code: String)
将使用Swift中的struct自动为我们生成带签名的初始化程序.所以到了最后,我真正想要的是(如果可能的话):
struct SupportedCurrency {
let code: String
convenience init(_ currecny: DeprecatedCurrency) { // error!!
self.init(code: currecny.code)
}
}
Rahul..
18
只需删除它convenience
,它不是必需的struct
.
从Swift
文档.
初始化程序可以调用其他初始化程序来执行实例初始化的一部分.此过程称为初始化程序委派,可避免跨多个初始化程序.
他们没有提到使用convenience
.它是convenience
语义的,但不需要关键字.
struct DeprecatedCurrency {
let code: String
}
struct SupportedCurrency {
let code: String
init(_ currency: DeprecatedCurrency) { // error!!
self.init(code: currency.code)
}
init(code: String) {
self.code = code
}
}
JeremyP..
9
结构不需要这个词 convenience
试试这个:
struct SupportedCurrency {
let code: String
init(_ currency: DeprecatedCurrency) { // error!!
self.init(code: currency.code)
}
init(code: String) {
self.code = code
}
}
问题不在于我们为什么不把convenience
对于结构,但为什么做我们把convenience
上课.原因是类具有继承性.对于一个类,你需要调用超类的指定构造函数(不确定这是否是正确的术语,它来自Objective-C的初始化器.该单词convenience
将构造函数标记为"不是指定的构造函数".
1> Rahul..:
只需删除它convenience
,它不是必需的struct
.
从Swift
文档.
初始化程序可以调用其他初始化程序来执行实例初始化的一部分.此过程称为初始化程序委派,可避免跨多个初始化程序.
他们没有提到使用convenience
.它是convenience
语义的,但不需要关键字.
struct DeprecatedCurrency {
let code: String
}
struct SupportedCurrency {
let code: String
init(_ currency: DeprecatedCurrency) { // error!!
self.init(code: currency.code)
}
init(code: String) {
self.code = code
}
}
2> JeremyP..:
结构不需要这个词 convenience
试试这个:
struct SupportedCurrency {
let code: String
init(_ currency: DeprecatedCurrency) { // error!!
self.init(code: currency.code)
}
init(code: String) {
self.code = code
}
}
问题不在于我们为什么不把convenience
对于结构,但为什么做我们把convenience
上课.原因是类具有继承性.对于一个类,你需要调用超类的指定构造函数(不确定这是否是正确的术语,它来自Objective-C的初始化器.该单词convenience
将构造函数标记为"不是指定的构造函数".