Я новичок в Swift. Я взял пару онлайн-курсов и начал преобразовывать существующий проект Objective-C в Swift как учебный опыт. У меня есть несколько вопросов, если у кого-то есть время. Я искал доску, но не нашел ответов. Прошу прощения, если я пропустил их.Быстрые классы против классов Objective-C. Я на правильном пути?
Протоколы делегатов - Я привык определять свои собственные в Objective-C. Ниже у меня есть исходная версия Objective-C, а ниже у меня есть новая версия Swift. Я следил за правильным шаблоном проектирования для Swift?
Я нахожу, что делаю дополнительные опции для всех объектов, таких как NSData или пользовательские классы. Является ли эта практика приемлемой? Я не уверен, как узнать начальное значение для большинства объектов. Я знаю, что язык хочет, чтобы вы установили начальное значение, но для некоторых объектов это кажется странным.
Если я не ошибаюсь, нам не нужно называть self.super init в пользовательских инициализаторах в Swift. Это верно?
Objective-C Версия
@protocol FLOParserHandlerDelegate;
@interface FLOParserHandler: NSObject <NSXMLParserDelegate>
// Properties
@property (nonatomic, strong) NSMutableData *PHData;
@property (nonatomic, strong) NSMutableString *currentParsedCharacterData; // This grabs the characters as they come in and adds them together.
@property (nonatomic, strong) NSMutableArray *XMLDataArray; // This is the master array that holds all of the article arrays with the date, title and link objects.
@property (nonatomic, strong) NSMutableDictionary *dateTitleLinkDictionary;// This is used to gather the date, title and link in an array to added to the master array.
// Delegate Property
@property (nonatomic, weak) id <FLOParserHandlerDelegate> delegate;
// init Methods
- (id) initWithCHData: (NSMutableData *) data;
// Class Methods
-(void) startParser;
@end
#pragma mark-
#pragma mark FLOParserHandler Protocol Definition
@protocol FLOParserHandlerDelegate
@optional
- (void) floParserHandlerDidFinishParsing: (FLOParserHandler *) parserHandler;
- (void) floParserHandler: (FLOParserHandler *) parserHandler didFailWithError: (NSError *) error;
@end
Swift Версия
import Foundation
protocol FLOParserHandlerDelegate
{
func floParserHandlerDidFinishParsing(parserHandler : FLOParserHandler) ->()
func floParserHandler(parserHandler : FLOParserHandler, error : NSError) ->()
}
// Note that we have to inherit from NSObject here. I believe this iis because we are mixing it with Objective-C.
class FLOParserHandler : NSObject, NSXMLParserDelegate
{
var PHData : NSData?
var currentParsedCharacterData : String?
var XMLDataArray : [String]?
var dateDictionary : [String:NSDate]?
var titleDictionary : [String:String]?
var linkDictionary : [String:String]?
// Delegate Property
var delegate : FLOParserHandlerDelegate?
// Init Methods
init(data : NSData)
{
self.PHData = data
}
// Class Methds
func startParser()
{
var parser = NSXMLParser(data: self.PHData)
parser.delegate = self
parser.parse()
}
}
Спасибо,
Jon
Обычно протокол в objC наследуется от протокола.Это особенно важно, когда есть дополнительные методы, потому что вы должны иметь возможность проверять [delegate replysToSelector:], который находится в протоколе . Я не знаю, как это сделать быстро, извините, но я думаю, что это недосмотр в вашем исходном коде ObjC. –
Jef