静态成员 'load' 不能用于类型 'AppDelegate' 的实例

Static member 'load' cannot be used on instance of type 'AppDelegate'

有人可以解释为什么我不能在 application(_, didFinishLaunchingWithOptions:) 中使用自定义 load 函数吗?

我收到错误消息:

Static member 'load' cannot be used on instance of type '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
    }
    ...
}

Data.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)")
    }
}

Swift 总是调用一个函数的最具体的重载版本是几个可以用相同的参数调用。

在您的特定情况下,这意味着将调用实例方法而不是全局函数,因为实例方法比全局函数更特定于该类型。