Я хочу реализовать что-то вроде «registerClassForAction». Для этой цели я определил протокол:Swift: создать класс (AnyClass), соответствующий протоколу
@objc protocol TestProt {
func testMe() -> String
}
Давайте сделать объявление класса:
class TestClass: NSObject, TestProt {
func testMe() -> String {
return "test"
}
}
Я определяю функцию для регистрации объекта в другом классе:
func registerClassForAction(aClass: AnyClass) { ... }
Перейдя на REPL, я бы смоделировал регистрационный метод:
let aClass: AnyClass = TestClass.classForCoder() //or .self
let tClass = aClass as NSObject.Type
let tInst = tClass() as TestProt
tInst.testMe()
Это в настоящее время работает, но есть еще один способ для создания экземпляра tClass, кроме с
let tClass = aClass as NSObject.Type
Причины спрашивать, я хотел бы изучить возможность избавиться от NSObject поэтому мой TestClass не в наследовать от NSObject. Делегация была рассмотрена, но я хотел бы контролировать время жизни tInst и иметь возможность отключить ее в определенный момент времени.
спасибо за помощь
Рон
«Определить функцию для регистрации объекта в другой класс "является делегацией. Я бы предположил, что ваш вызывающий объект создает свойство делегирования TestProt и назначает ему TestClass. Литейная гимнастика отличает в лучшем случае. –
Вы правы - я был «вдохновлен» методом 'registerClass: forCellWithReuseIdentifier:' UITableViewController. Но я также хотел бы контролировать жизненный цикл этого класса, поскольку он нужен только в очень конкретное время, и его можно было бы отпустить. Не уверен, что делегирование является правильным выбором. Просто из любопытства я узнаю о том, как создавать события и протоколы Swift, поэтому это кажется хорошим упражнением. – Ron