gpt4 book ai didi

ios - 在静态函数中使用计算值

转载 作者:行者123 更新时间:2023-11-28 23:19:52 24 4
gpt4 key购买 nike

我有一个静态函数,我需要在其中使用计算值。函数的布局如下:

fileprivate static func getToken() {
var request = URLRequest(url: URL(string: Constant.AuthRequestURL.Values.IDTokenURL)!,timeoutInterval: Double.infinity)
request.addValue(getUserAgent(), forHTTPHeaderField: "User-Agent")
request.addValue(Constant.AuthRequestHeader.Values.ContentType, forHTTPHeaderField: "Content-Type")
}

目前我无法运行这段代码,因为它无法访问 getUserAgent(),我试图用这个 block 在上面的类级别定义它:

func getUserAgent() -> String {
let app = "default"
let version = Bundle.main.infoDictionary["CFBundleShortVersionString"] as? String
let bundleId = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String
let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
let iOS = UIDevice.current.systemVersion
userAgent = "\(app)/\(version ?? "6.2.1")) (\(bundleId ?? "default"); build:\(build ?? "1014"); x86_64; iOS \(iOS); scale:2.0)"
return userAgent
}

我猜我定义函数的方式有问题,因为我没有实例化一个以 this 作为成员的对象?如何让我的静态函数访问在运行时生成 UserAgent 字符串的函数?

最佳答案

请仔细阅读静态方法与实例方法

实例方法要求类的实例已经初始化,并且您从类的实例中调用这些方法。

静态方法不附加到类的特定实例,可以在任何地方调用。因此,他们无法访问特定于类实例的方法,因为静态方法无法访问类实例。

例如:

class Thing() {

var a = 0

func doThing() {
// is called from an instance of Thing meaning it can access `a`
a = 1
print(a) // prints 1
}

static func doOtherThing() {
// can be called from anywhere so there is no guarentee `a` exists.
// in fact it's guarenteed that from the context of this method `a` does not exist

// but we could make an instance of thing
let thing = Thing()

print(thing.a) // prints 0
thing.doThing() // prints 1
print(thing.a) // prints 1

// and we could have a different thing
let thingTwo = Thing()
print(thing.a != thingTwo.a) // True since its 1 != 0
}
}

因此你有几个选择:

1 - 让你的静态方法不是静态的,这样当它被调用时,它将有一个类的实例来调用非静态方法。

2 - 使您的非静态方法成为静态方法,这样它就可以从其他静态方法调用而无需类的实例。

3 - 在静态方法中创建类的实例并从该类实例调用非静态方法。

希望我解释得够清楚

关于ios - 在静态函数中使用计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59795000/

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