DevPrep

Все темы › Objective-C

AnyObject vs Any vs NSObject vs id — разница

Middle PRO

Четыре уровня «что угодно»

import Foundation

final class Box: NSObject {
    @objc dynamic var value = 1
}

let anything: [Any] = [1, "two", Box(), { (x: Int) in x }]
let objects: [AnyObject] = [Box(), NSString(string: "s")]
let cls: AnyClass = Box.self
let legacy: Any = NSNumber(value: 3)   // так приходит id из Obj-C

func describe(_ v: Any) -> String {
    switch v {
    case let n as Int: return "Int \(n)"
    case let s as String: return "String \(s)"
    case let o as NSObject: return "NSObject \(o)"
    default: return "other"
    }
}
print(describe(legacy))   // Int 3 — NSNumber бриджится в Int
_ = (anything, objects, cls)

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store