如何在Swift中编写init方法?

我想用Swift编写一个init方法。这里我在Objective-C中初始化一个NSObject类:

-(id)initWithNewsDictionary:(NSDictionary*)字典
{
self=[super init];
如果(自我){
self.title=字典[@“title”];
self.shortDescription=字典[@“description”];
self.newsDescription=字典[@“内容:编码”];
self.link=字典[@“link”];
self.pubDate=[self-getDate:dictionary[@“pubDate”];
}
回归自我;
}

如何用Swift编写此方法

我想,这可能是你们班的良好基础:

类MyClass{
//您可能需要根据词典的内容设置适当的类型
变量标题:字符串?
var shortDescription:字符串?
var newsDescription:字符串?
var-link:NSURL?
var pubDate:NSDate?
//
init(){
//如果您的类已从任何其他类继承,请取消注释此行
//super.init()
}
//
便利初始化(uuDictionary:dictionary<String,AnyObject>){
self.init()
title=字典[“title”]as?NSString
shortDescription=字典[“shortDescription”]作为NSString
newsDescription=字典[“newsDescription”]作为?NSString
link=字典[“link”]as?NSURL
pubDate=self.getDate(字典[“pubDate”])
}
//
func getDate(对象:AnyObject?)->NSDate{
//在这里将对象解析为日期,并替换下一行作为您的愿望。。。
返回对象为?NSDate
}
}

高级模式

我希望避免在项目中复制和粘贴键,因此我会将可能的键放入例如enum中,如下所示:

枚举MyKeys:Int{
案例KeyTitle、KeyShortDescription、KeyNewsDescription、KeyLink、KeyPubDate
func toKey()->字符串{
切换自身{
案例.关键链接:
返回“标题”
案例.KeyNewsDescription:
返回“newsDescription”
案件日期:
返回“发布日期”
案例.键槽说明:
返回“简短描述”
案例.关键标题:
返回“标题”
违约:
返回“”
}
}
}

您可以改进您的便利性init(…)方法,例如这样,将来您可以避免在代码中键入任何可能的密钥错误:

便利初始化(\uuDictionary:dictionary<String,AnyObject>){
self.init()
title=字典[MyKeys.KeyTitle.toKey()]作为?NSString
shortDescription=字典[MyKeys.KeyShortDescription.toKey()]作为?NSString
newsDescription=字典[MyKeys.KeyNewsDescription.toKey()]作为?NSString
link=字典[MyKeys.KeyLink.toKey()]as?NSURL
pubDate=self.getDate(字典[MyKeys.KeyPubDate.toKey()])
}

注意:这只是一个如何实现的原始想法,根本不需要使用conveniece初始值设定项,但这看起来是一个明显的选择,因为我对您的最终类一无所知–您只共享了一个方法。

发表评论