![](/img/trans.png)
[英]How to rectify the error of “self' used before 'self.init' call or assignment to 'self'”?
[英]Error of 'self' used before 'self.init' call or assignment to 'self' on init in a different module
我檢查了共享相同主題的問題,但沒有一個解決我遇到的這種奇怪行為:
假設我有一個簡單的老派struct
:
struct Person {
var name: String
var age: Int
}
我想在這樣的extension
中重載init
:
extension Person {
init(name: String) {
self.name = name
self.age = 26
}
}
正如您所料,這段代碼運行得很好。
但是,如果我將Person struct
移動到不同的module
(也稱為不同的框架)並將其公開給我的模塊,如下所示:
public struct Person {
public var name: String
public var age: Int
}
如果我現在在module
的本地extension
中重載init
,編譯器會產生以下錯誤:
'self' used before 'self.init' call or assignment to 'self'
'self.init' isn't called on all paths before returning from initializer
我發現避免這個問題的唯一方法是在重載的初始化中調用原始init
,如下所示:
extension Person {
init(name: String) {
self.init(name: name, age: 24)
}
}
我個人覺得這種行為很奇怪。
我錯過了什么嗎?
實際上這個例子對我有用,只有一個警告說Initializer for struct 'Person' must use "self.init(...)" or "self =..." because it is not in module
。 據我所知,自 Swift 4.2 以來,結構初始化程序被強制在結構定義模塊的 scope 中定義是設計使然。 檢查“ https://github.com/apple/swift-evolution/blob/master/proposals/0189-restrict-cross-module-struct-initializers.md ”中的動機部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.