我想init
在Swift中编写一个方法。在这里,我NSObject
在Objective-C中初始化一个类:
-(id)initWithNewsDictionary:(NSDictionary *)dictionary
{
self = [super init];
if (self) {
self.title = dictionary[@"title"];
self.shortDescription = dictionary[@"description"];
self.newsDescription = dictionary[@"content:encoded"];
self.link = dictionary[@"link"];
self.pubDate = [self getDate:dictionary[@"pubDate"]];
}
return self;
}
如何在Swift中编写此方法?
我想这可能是您上课的良好基础
class MyClass {
// you may need to set the proper types in accordance with your dictionarty's content
var title: String?
var shortDescription: String?
var newsDescription: String?
var link: NSURL?
var pubDate: NSDate?
//
init () {
// uncomment this line if your class has been inherited from any other class
//super.init()
}
//
convenience init(_ dictionary: Dictionary<String, AnyObject>) {
self.init()
title = dictionary["title"] as? NSString
shortDescription = dictionary["shortDescription"] as? NSString
newsDescription = dictionary["newsDescription"] as? NSString
link = dictionary["link"] as? NSURL
pubDate = self.getDate(dictionary["pubDate"])
}
//
func getDate(object: AnyObject?) -> NSDate? {
// parse the object as a date here and replace the next line for your wish...
return object as? NSDate
}
}
我想避免将键复制粘贴到项目中,因此我将可能的键放入enum
这样的示例中:
enum MyKeys : Int {
case KeyTitle, KeyShortDescription, KeyNewsDescription, KeyLink, KeyPubDate
func toKey() -> String! {
switch self {
case .KeyLink:
return "title"
case .KeyNewsDescription:
return "newsDescription"
case .KeyPubDate:
return "pubDate"
case .KeyShortDescription:
return "shortDescription"
case .KeyTitle:
return "title"
default:
return ""
}
}
}
并且您可以convenience init(...)
像这样改进您的方法,并且将来您可以避免代码中任何可能的键错误:
convenience init(_ dictionary: Dictionary<String, AnyObject>) {
self.init()
title = dictionary[MyKeys.KeyTitle.toKey()] as? NSString
shortDescription = dictionary[MyKeys.KeyShortDescription.toKey()] as? NSString
newsDescription = dictionary[MyKeys.KeyNewsDescription.toKey()] as? NSString
link = dictionary[MyKeys.KeyLink.toKey()] as? NSURL
pubDate = self.getDate(dictionary[MyKeys.KeyPubDate.toKey()])
}
注意:那只是如何做的一个原始想法,根本不需要使用便捷的初始化程序,但是对于我对您的最终课程一无所知,这看起来是显而易见的选择–您仅共享一种方法。
问题内容: 我正在跟踪Swift和Objective-C Runtime,它适用于常规方法。 我喜欢使用init方法,据我了解,init就像一个类方法。因此,我尝试将初始化作为实例和类方法。但这似乎不起作用 我可以使用Objective C使其工作,只是想知道如何在Swift中使其工作 摘录自我的要旨 问题答案: 为方法创建选择器时,应使用Obj C方法签名作为选择器的基础,因为使用Obj C运行
问题内容: 我正在尝试将此代码更新为快速3: 到目前为止,我只是尝试了编译器给出的自动更正。结果是这样的代码: 不幸的是,这并没有使我走得太远,从而导致了其他错误。 有没有人解决这个问题? 请注意,我只是尝试如何编写通知。我(尚未)尝试修复通知功能。 问题答案: 斯威夫特4 您还可以在这些方法中使用以下代码获取键盘信息。
问题内容: 有什么办法可以使以下在Swift 3中正常工作? 该功能应该采取型的封闭,运行它传递到它,然后简单地返回。 另一个选择是为此使用运算符,例如“ ”(从Kotlin和Xtend语言中借用了这个想法)。 试图做这样的扩展: 但是它需要在闭包中显式声明参数类型: 这不方便,并且使整个想法不值得付出努力。类型已经在对象创建时指定,并且应该有可能不明确地重复它。 谢谢! 问题答案: HasApp
我正在为我的HeapSort静态方法开发一个辅助方法私有E sortRemove()。让我注意一下,这个堆是一个MaxHeapPriorityQueue,它的所有元素都有一个子元素,其值小于父元素。 我正在努力 重复调用删除,直到堆为空。 但是,当一个元素被“删除”时,它被移动到数组的末尾,而不是完全从数组中逐出。 当你完成时,瞧!数组已排序。 我试图弄清楚如何让这个算法适合我的代码。 因此我有:
问题内容: 在Swift 2中,我能够使用大型中央调度来延迟动作: 但是,自Swift 3起,似乎不再可以编译了。在现代Swift中编写此代码的首选方法是什么? 问题答案: 语法很简单: 请注意,上述添加为a的语法似乎是造成混乱的根源(特别是因为我们习惯于添加nsec)。之所以可以使用“ add seconds as ”语法,是因为a 和在幕后,有一个运算符将占用a 并将其增加很多秒: 但是,如果