gpt4 book ai didi

ios - 在 'self' 调用之前使用的 'self.init' 错误或在不同模块的 init 上分配给 'self'

转载 作者:行者123 更新时间:2023-12-01 15:27:33 34 4
gpt4 key购买 nike

我检查了共享相同主题的问题,但没有一个解决我遇到的这种奇怪行为:

说我有一个简单的老学校struct :

struct Person {
var name: String
var age: Int
}

我想重载 initextension像这样:
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
}

如果我现在重载 initextension本地在我的 module编译器产生以下错误:
'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 以来,结构初始化程序被强制定义在结构定义模块的范围内,这是设计使然。检查“https://github.com/apple/swift-evolution/blob/master/proposals/0189-restrict-cross-module-struct-initializers.md”中的动机部分'。

关于ios - 在 'self' 调用之前使用的 'self.init' 错误或在不同模块的 init 上分配给 'self',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62150574/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com