如何在Swift中实现decodeObjectOfClasses

Tim*_*ell 7 ios swift

我无法找到NSSecureCodingSwift中符合协议的正确方法,特别是在解码作为其他对象数组的对象时.

我无法NSSet在swift中创建类类型.

在Objective-C中我会使用

self.books = [aDecoder decodeObjectOfClasses:[NSSet setWithObjects:[NSArray class], [Book class], nil] forKey:@"books"];
Run Code Online (Sandbox Code Playgroud)

在Swift我遇到了NSSet这样的问题:

self.books = aDecoder.decodeObjectOfClasses(NSSet().setByAddingObject(NSArray.self).setByAddingObject(Book.self), forKey:"books")
Run Code Online (Sandbox Code Playgroud)

这是错误:

Type 'NSArray.Type' does not conform to protocol 'AnyObject'
Run Code Online (Sandbox Code Playgroud)

sto*_*fen 5

对于简单的对象:

self.myObject = aDecoder.decodeObjectOfClass(MyObject.self, forKey: "myObject")!
Run Code Online (Sandbox Code Playgroud)

自 Swift 3.0 起:

self.myObject = aDecoder.decodeObject(of:MyObject.self, forKey: "myObject")!
Run Code Online (Sandbox Code Playgroud)

雨燕4

aDecoder.decodeObject(of: [NSArray.self, Book.self], forKey: "books") as? [Book]
Run Code Online (Sandbox Code Playgroud)

对于嵌套对象:

NSSet(objects: [NSArray.self, Book.self])
Run Code Online (Sandbox Code Playgroud)


fuz*_*uzz 1

宣言

迅速

func decodeObjectOfClasses(_ classes: NSSet,
                    forKey key: String) -> AnyObject?
Run Code Online (Sandbox Code Playgroud)

自 Swift 3.0 起:

func decodeObject<DecodedObjectType where DecodedObjectType : NSCoding, DecodedObjectType : NSObject>(of cls: DecodedObjectType.Type, forKey key: String) -> DecodedObjectType?
Run Code Online (Sandbox Code Playgroud)

目标C

- (id)decodeObjectOfClasses:(NSSet *)classes
                     forKey:(NSString *)key

let books: AnyObject? = aDecoder.decodeObjectOfClasses(NSSet().setByAddingObject(NSArray.self).setByAddingObject(Book.self), forKey:"books")
Run Code Online (Sandbox Code Playgroud)