У меня есть эти классы:
AppDataProtocol.swift
public protocol AppDataProtocol{
var logoImagePath : String! {get}
var logoTitle : String? {get}
var logoSubtitle : String? {get}
var categories : [MainMenuOption]! {get}
static func contentElements(filter: ContentFilter?) -> [ContentElement]!
}
AppData.swift
class AppData{
static var sharedData : AppDataProtocol!
init(){}
}
CustomAppData.swift [класс, соответствующий AppDataProtocol]
class CustomAppData: AppData, AppDataProtocol {
// fulfills the AppDataProtocol, omitted for brevity
}
Итак, с этими заданными классами я пытаюсь динамически установить переменную класса следующим образом:
AppData.sharedData = CustomAppData()
и получить к нему доступ следующим образом:
// we need the class so we can call the class function
let appData = AppData.sharedData.dynamicType as! AppDataProtocol.Type
/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
/*CRASH!*/
let contentElements = appData.contentElements(nil)
Вызывая dynamicType для экземпляра, хранящегося в переменной класса AppData (sharedData), я должен получить класс, соответствующий AppDataProtocol, верно? Я думаю, проблема в том, что dynamicType на самом деле возвращает тип интерфейса (т. е. «AppDataProtocol»), и я, вероятно, не могу ничего вызывать для этого как такового. Может кто-нибудь сказать мне, почему это не работает?
AppData.sharedData
не инициализирован и не имеет типа, только протокол, которому вы хотите, чтобы он соответствовал. Сработает ли когда-нибудь остальная часть вашего принудительного подавления... - person Grimxn   schedule 27.10.2015AppData.sharedData = CustomAppData()
- person the_critic   schedule 27.10.2015AppData.sharedData.dynamicType
являетсяImplicitlyUnwrappedOptional<AppDataProtocol>.Type
, а неAppDataProtocol.Type
, что, вероятно, не то, что вы ожидали... - person Grimxn   schedule 27.10.2015AppDataProtocol?
, а не неявно развернутымAppDataProtocol!
в классе, тогда вы можете развернуть его следующим образом:let appData = (AppData.sharedData!).dynamicType // "CustomAppData.Type"
, без необходимости понижать. - person Grimxn   schedule 27.10.2015