首页 > 解决方案 > 如何创建 Swift 函数(或类)并传递一些变量

问题描述

在 PHP 中,我习惯于创建这样的函数

function fun ($one,$two) { return $two; }

后来我可以在 PHP 中做

$variable1 = "something";
$variable2 = "something2";
echo fun($variable1,$variable2);

但我是 Xcode / Swift 5 的新手

我创建了一个类

class APIX {
    
    var urlxtra: String
    var deviceToken: String
       
    init(urlxtra: String, deviceToken: String) {
        
        self.urlxtra = urlxtra
        self.deviceToken = deviceToken
        
        let url = "https://www.api__url___.com/v1/"+deviceToken+"/"+urlxtra+"/"
        
        let urlObj = URL(string: url)
        var urlRequest = URLRequest(url: urlObj!)
        
        urlRequest.httpMethod = "GET"
        urlRequest.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData
        
        let task = URLSession.shared.dataTask(with: urlObj!)
        
        task.resume()
        
    }
}

并这样称呼它有效

let apicall = APIX(urlxtra: "somthing1", deviceToken: "something2")

但是当我这样做时

let stubToken = "somthing3";
let apicall = APIX(urlxtra: "somthing1", deviceToken: stubToken)

Xcode 说:

Cannot use instance member 'stubToken' within property initializer; property initializers run before 'self' is available

我怎样才能解决这个问题 ?

标签: swiftclassvariablesswift5

解决方案


我的猜测是你做了这样的事情:

class Something {

    let stubToken = "somthing3";
    let apicall = APIX(urlxtra: "somthing1", deviceToken: stubToken)
}

两者都是实例属性,同时初始化(不能保证它们的初始化顺序),因此一个不能依赖另一个。您需要建立一个依赖关系,以便stubTokenapicall.

如果stubToken确实是一个常量,则将其设为静态:

class Something {

    static let stubToken = "somthing3";
    let apicall = APIX(urlxtra: "somthing1", deviceToken: Something.stubToken)
}

如果它是一个变量,您可以在 中初始化apicall它,或者按照其他答案的建议init制作第二个变量lazy


推荐阅读