静态成员“负载”不能用于“AppDelegate”类型的实例

Posted

技术标签:

【中文标题】静态成员“负载”不能用于“AppDelegate”类型的实例【英文标题】:Static member 'load' cannot be used on instance of type 'AppDelegate' 【发布时间】: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 你可以像&lt;Module Name&gt;.load("data.json") 这样访问方法,即ExampleApp.load("data.json")。 【参考方案1】:

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

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

【讨论】:

以上是关于静态成员“负载”不能用于“AppDelegate”类型的实例的主要内容,如果未能解决你的问题,请参考以下文章

错误:静态成员 copyWithZone 不能用于 UIImageView 类型的实例

为啥静态成员函数只能在类定义中声明为静态,而不能在其自己的定义中声明?

Java面向对象之关键字static 入门实例

C++ 静态成员变量成员函数

继承抽象static

static关键字和继承