Может кто-нибудь объяснить, почему я не могу использовать пользовательскую функцию load
в моем application(_, didFinishLaunchingWithOptions:)
?
Я получаю сообщение об ошибке:
Stati c member 'load 'нельзя использовать в экземпляре типа' AppDelegate '
Когда я переименовываю функцию, например, в func loader(...)
и вызываю ее с помощью loader("data.json")
, она работает как положено. Разве XCode не распознает правильно, что я использую пользовательскую функцию с именем load
вместо функции NSObject.load()
здесь? Я знаю, что могу просто переименовать функцию, но я хотел бы понять причину root.
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)")
}
}