将参数值传递给 Observable 对象

问题描述

我有一个 ObservableObject 类,用于从 api 获取数据。它需要一个参数,即 api 密钥。我正在尝试将该键从我的 ContentView 的参数传递给对象。

class UnsplashAPI: ObservableObject {
    //some code
    var clientId: String
    
    init(clientId: String) {
        self.clientId = clientId
    }
    //some more code
}

当我在结构中要求参数时,这很好用

struct ContentView: View {
    
    @Observedobject var api = UnsplashAPI(clientId: "APIKEY")

    var body: some View {
        //View
    }
}

然而这不是:

struct ContentView: View {
    var clientId: String
    @Observedobject var api = UnsplashAPI(clientId: self.clientId) // Cannot find 'self' in scope
    
    init(clientId: String){
        self.clientId = clientId
    }
    
    var body: some View {
        //View
    }
}

我认为我初始化结构错误,因为我收到错误“无法在范围内找到‘自我’”

解决方法

init 内初始化它

struct ContentView: View {
    var clientId: String
    @ObservedObject var api: UnsplashAPI
    
    init(clientId: String){
        self.clientId = clientId
        self.api = UnsplashAPI(clientId: clientId)    // << here !!
    }
// ...