Ответ 1
Нет. Объекты Swift фактически не наследуются ни от базового базового класса. Компилятор может вставить его как деталь реализации, но язык не имеет этого.
Решение - это функция и обычно общая функция, а не метод. Что-то, что относится к "каждому виду объекта", действительно не инкапсулировано. Есть очень мало действий, которые применяются ко всем мыслимым вещам во Вселенной. Но функции могут абсолютно отображать абсолютно что-либо другое, поэтому здесь лучший инструмент.
Как и примечание, не все объекты наследуются от NSObject
, и это не требование языка. Но вы правы, что подавляющее большинство. Взгляните на NSProxy
для вершины дерева не NSObject
(он реализует протокол NSObject
, но не наследует от класса NSObject
). Вот почему id
- это не то же самое, что NSObject*
.
На ваш вопрос о связанных объектах это встроено:
import Foundation
class Thing { }
let thing = Thing()
var MyKey: Character = "0"
objc_setAssociatedObject(thing, &MyKey, "I'm a value!", objc_AssociationPolicy(OBJC_ASSOCIATION_COPY))
println(objc_getAssociatedObject(thing, &MyKey))
Это то, что вы пытались создать? Обратите внимание, что objc_setAssociatedObject
также является функцией, а не методом, в ObjC.