linkproof 2024-11-17 21:43 采纳率: 100%
浏览 7
已结题

Swift 类实例初始化问题

Swift初学。
遇到如下问题:

Xcode报错:Cannot use instance member 'p1' within property initializer; property initializers run before 'self' is available
请教如何解决?


```swift
class person{
    var name:String
    init(name: String) {
        self.name = name
    }

}


struct model {
    var p1 = person(name: "Chen")
    var p2 = person(name: "Li")
    var p:[person] = [p1,p2]
    

}

```

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在 Swift 中,当你遇到这个错误时,是因为你在类或结构体实例的成员变量初始化器中使用了一个实例成员,而这个成员变量初始化器是在 self 实例完全可用之前运行的。在你的代码中,你试图在 model 结构体的全局变量初始化器中创建 person 实例,这是不允许的。因为在这个时候 self 还不可用,所以你不能使用实例成员或方法。

    为了解决这个问题,你可以将 model 结构体的初始化器与 person 实例的创建结合起来。这样,你可以在 model 实例被创建时初始化 person 实例。以下是修改后的代码:

    class Person {
        var name: String
        init(name: String) {
            self.name = name
        }
    }
    
    struct Model {
        var p1: Person
        var p2: Person
        var people: [Person]
        
        init() {
            p1 = Person(name: "Chen")
            p2 = Person(name: "Li")
            people = [p1, p2]
        }
    }
    

    在这个修改后的代码中,我创建了一个 Model 结构体的初始化器,并在其中初始化了 p1p2 实例变量。这样,当 Model 实例被创建时,p1p2 会被正确初始化。另外,你也可以选择在结构体外部单独创建 Person 实例并传递给 Model 的初始化器。但是根据你的代码和需求,这种方式更为直接和简单。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 11月17日