Подтвердить что ты не робот

Расширить все объекты Swift

Можно ли расширить все существующие объекты Swift, как при добавлении category поверх NSObject в Objective C?

В соответствии с этой статьей все объекты Swift наследуются от класса SwiftObject, но я не могу добавить к нему расширение.

Есть ли какое-либо решение для этого?

4b9b3361

Ответ 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.