Рефакторинг это к этому
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ObjectLookup.fetch(withID: "2322A63C74C92") { obj in
print(obj?.ObjectName)
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
}
struct ObjectLookup: Codable {
let ObjectID: Int?
let ObjectName: String?
let Creators: String?
let Medium: String?
let Titles: String?
let LabelUUID: String?
static func fetch(withID id : String,completion:@escaping(_ ret:ObjectLookup?) -> Void ){
let urlString = DomainURL + "\(id)"
print("urlString is \(urlString)" )
if let url = URL(string: urlString) {
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data,response,error) in
print(String(data: data!,encoding: .ascii) ?? "no data")
if error != nil {
compeltion(nil)
return
}
if let res = try? JSONDecoder().decode(ObjectLookup.self, from: data!) {
print( res.ObjectName ?? "no url")
completion(res)
}
})
task.resume()
}else{
print("bad url")
completion(nil)
}
}
}
Не используйте заглавные буквы в именах переменных, используйте camelCase (делайте это только для классов), я знаю, что изменение любой буквы нарушит процесс кодирования, поэтому сохраняйте егоили используйте CodingKeys для преобразования переменных, также обратите внимание, что обратный вызов URLSession.shared.dataTask
находится в фоновой очереди, поэтому рассмотрите возможность использования
DispatchQueue.main.async {}
внутри обратного вызова в viewDidLoad
, если вы хотите выполнить какую-либо операцию пользовательского интерфейса