【发布时间】:2020-03-02 11:29:52
【问题描述】:
谁能解释为什么我不能在我的application(_, didFinishLaunchingWithOptions:) 中使用自定义load 函数?
我收到错误消息:
静态成员“load”不能用于“AppDelegate”类型的实例
当我将函数重命名为 func loader(...) 并使用 loader("data.json") 调用它时,它会按预期工作。 Xcode 是否无法正确识别我在这里正确使用了名为 load 的自定义函数而不是 NSObject.load() 函数?我知道我可以坚持重命名函数,但我想了解其根本原因。
AppeDelegate.swift
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var data: Maturity? = nil
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
data = load("data.json") // Static member 'load' cannot be used on instance of type 'AppDelegate'
return true
}
...
}
数据.swift
import Foundation
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
【问题讨论】:
-
load是否定义为全局函数? -
是的,它是在
Data.swift中定义的,我唯一没有粘贴的是文件顶部的import Foundation。 (更新:为了完整性,我添加了import Foundation) -
你可以像
<Module Name>.load("data.json")这样访问方法,即ExampleApp.load("data.json")。
标签: ios swift function appdelegate uiapplicationdelegate