Я работаю над проектом Swift с пользовательскими классами. Старая версия Objective-C проекта имела пользовательский метод инициализации, показанный ниже.Objective -C vs. Swift Пользовательские инициализаторы
Пользовательских инициализации из пользовательского класса
-(id) initWithURLDictionary: (NSDictionary *) dictionary{
self = [super init];
if (self) {
self.URLDictionary = dictionary;
}
return self;
}
При использовании этого класса я хотел бы создать объект с пользовательским инициализатором, а затем установить делегат для пользовательского класса к себе.
// Create a temporary dictionary of the feeds, allocate and initialize the FLODataHandler object and set the delegate (me) to self.
NSDictionary *URLTempDictionary = [[NSDictionary alloc] initWithObjectsAndKeys: kFLOCyclingURL, @"FLO Cycling", kTriathleteURL, @"Triathlete", kVeloNewsURL, @"Velo News", kCyclingNewsURL, @"Cycling News", kRoadBikeActionURL, @"Road Bike Action", kIronmanURL, @"Ironman", nil];
self.dataHandler = [[FLODataHandler alloc] initWithURLDictionary: URLTempDictionary];
self.dataHandler.delegate = self;
В Swift я немного смущен. Кажется, у меня есть два варианта. Вариант 1 заставил бы меня создать пользовательский инициализатор в пользовательском классе.
Пользовательские Initializer в пользовательском классе
init(dictionary : [String:String]) { self.URLDictionary = dictionary }
Процесс такой же, как и в Objective-C.
let URLTempDictionary = [kFLOCyclingURL : "FLO Cycling", kTriathleteURL : "Triathlete", kVeloNewsURL : "Velo News", kCyclingNewsURL : "Cycling News", kRoadBikeActionURL : "Road Bike Action", kIronmanURL : "Ironman"]
var tempDataHandler = FLODataHandler(dictionary: URLTempDictionary)
self.dataHandler! = tempDataHandler
Вариант 2 не является жалобой, но представляется неполным.
Вместо создания пользовательского инициализатора я бы просто сделал следующее. Пользовательский класс имеет свойство словаря URLDictionary.
let URLTempDictionary = [kFLOCyclingURL : "FLO Cycling", kTriathleteURL : "Triathlete", kVeloNewsURL : "Velo News", kCyclingNewsURL : "Cycling News", kRoadBikeActionURL : "Road Bike Action", kIronmanURL : "Ironman"]
self.dataHandler!.URLDictionary = URLTempDictionary
self.dataHandler.delegate = self
Так что мой вопрос связан с необходимостью пользовательского инициализаторе и использование
var tempDataHandler = FLODataHandler(dictionary: URLTempDictionary)
использование
self.dataHandler!.URLDictionary = URLTempDictionary
выполнить ли тот же результат?
Позаботьтесь,
Jon
Не могли бы вы сообщить мне, как вы объявили данные членомHandler в своем классе? – Abdullah