pass parameter create objective-c swift init

objective-c - parameter - swift create selector



Cómo escribir el método Init en Swift (4)

Eso podría ser una buena base para tu clase, supongo:

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 } }

modo avanzado

Me gustaría evitar copiar y pegar y pegar las claves en un proyecto, por lo que pondría las claves posibles, por ejemplo, en una enum como esta:

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 "" } } }

y puede mejorar su método de convenience init(...) como, por ejemplo, esto, y en el futuro puede evitar cualquier posible error de escritura de las claves en su código:

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()]) }

NOTA: esa es solo una idea cruda de cómo podría hacerlo, no es necesario usar el inicializador de pieza en absoluto, pero parecía una elección obvia con respecto a que no sé nada acerca de su clase final; solo ha compartido un método.

Quiero escribir el método init en swift , aquí le NSObject clase de modelo NSObject en 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; }

¿Cómo puedo escribir este método en swift ?


No es necesario llamar a este método desde otra clase, se llamará automáticamente

override init() { super.init() //synthesize.delegate = self // println("my array elements are /(readingData)") }