Error[8]: Undefined offset: 5, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个名为’News’的自定义结构,我想将其附加到NSUserDefault的数组中.但它显示错误“类型’新闻’不符合协议’AnyObject’”. 我不想将’News’结构更改为类,因为它已经被用于其他代码.无论如何我可以将NSUserDefaults.standardUserDefaults().arrayForKey(“savedNewsArray”)类型更改为[新闻]? var save 我有一个名为’News’的自定义结构,我想将其附加到NSUserDefault的数组中.但它显示错误“类型’新闻’不符合协议’AnyObject’”.

我不想将’News’结构更改为类,因为它已经被用于其他代码.无论如何我可以将NSUserDefaults.standardUserDefaults().arrayForKey(“savednewsArray”)类型更改为[新闻]?

var savednews = NSUserDefaults.standardUserDefaults().arrayForKey("savednewsArray")var addSavednews = savednews as? [News]addSavednews.append(News(ID: "00",Title: newsTitle,source: source,imageURL: imageURL,url: url))NSUserDefaults.standardUserDefaults().setobject(addSavednews,forKey: "savednewsArray")NSUserDefaults.standardUserDefaults().synchronize()

这是’新闻’结构.

public struct News {    public var ID: String    public var Title: String    public var source: String?    public var imageURL: String?    public var date: NSDate?    public var url: String    init(ID: String,Title: String,source: String,imageURL: String,url: String) {        self.ID = ID        self.Title = Title        self.source = source        self.imageURL = imageURL        self.url = url    }}
NSUserDefaults只能保存一小组类型:NSData,Nsstring,NSNumber,NSDate,仅包含这些类型的NSArray,或仅包含这些类型的NSDictionary.因此,最好的办法是使用NSKeyedUnarchiver对结构进行编码,这需要一个符合NSCoding的值.你可以让你的类型符合这一点,但我认为从你的用户隐藏它并且只是为内部表示创建一个私有类更清晰,如下所示:
struct Foo {    var a : String    var b : String?}extension Foo {    init?(data: NSData) {        if let Coding = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? EnCoding {            a = Coding.a as String            b = Coding.b as String?        } else {            return nil        }    }    func encode() -> NSData {        return NSKeyedArchiver.archivedDataWithRootObject(EnCoding(self))    }    private class EnCoding: NSObject,NSCoding {        let a : Nsstring        let b : Nsstring?        init(_ foo: Foo) {            a = foo.a            b = foo.b        }        @objc required init?(coder aDecoder: NSCoder) {            if let a = aDecoder.decodeObjectForKey("a") as? Nsstring {                self.a = a            } else {                return nil            }            b = aDecoder.decodeObjectForKey("b") as? Nsstring        }        @objc func encodeWithCoder(aCoder: NSCoder) {            aCoder.encodeObject(a,forKey: "a")            aCoder.encodeObject(b,forKey: "b")        }    }}

然后,为了保存您的阵列,您只需将.encode映射到您的阵列:

let fooArray = [ Foo(a: "a",b: "b"),Foo(a: "c",b: nil) ]let encoded = fooArray.map { 
let dataArray = NSUserDefaults.standardUserDefaults().objectForKey("my-key") as! [NSData]let savedFoo = dataArray.map { Foo(data: [+++])! }
.encode() }NSUserDefaults.standardUserDefaults().setobject(encoded,forKey: "my-key")

为了得到它,你可以简单地将NSData传递给init:

[+++] 总结

以上是内存溢出为你收集整理的数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?全部内容,希望文章能够帮你解决数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 6, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个名为’News’的自定义结构,我想将其附加到NSUserDefault的数组中.但它显示错误“类型’新闻’不符合协议’AnyObject’”. 我不想将’News’结构更改为类,因为它已经被用于其他代码.无论如何我可以将NSUserDefaults.standardUserDefaults().arrayForKey(“savedNewsArray”)类型更改为[新闻]? var save 我有一个名为’News’的自定义结构,我想将其附加到NSUserDefault的数组中.但它显示错误“类型’新闻’不符合协议’AnyObject’”.

我不想将’News’结构更改为类,因为它已经被用于其他代码.无论如何我可以将NSUserDefaults.standardUserDefaults().arrayForKey(“savednewsArray”)类型更改为[新闻]?

var savednews = NSUserDefaults.standardUserDefaults().arrayForKey("savednewsArray")var addSavednews = savednews as? [News]addSavednews.append(News(ID: "00",Title: newsTitle,source: source,imageURL: imageURL,url: url))NSUserDefaults.standardUserDefaults().setobject(addSavednews,forKey: "savednewsArray")NSUserDefaults.standardUserDefaults().synchronize()

这是’新闻’结构.

public struct News {    public var ID: String    public var Title: String    public var source: String?    public var imageURL: String?    public var date: NSDate?    public var url: String    init(ID: String,Title: String,source: String,imageURL: String,url: String) {        self.ID = ID        self.Title = Title        self.source = source        self.imageURL = imageURL        self.url = url    }}
NSUserDefaults只能保存一小组类型:NSData,Nsstring,NSNumber,NSDate,仅包含这些类型的NSArray,或仅包含这些类型的NSDictionary.因此,最好的办法是使用NSKeyedUnarchiver对结构进行编码,这需要一个符合NSCoding的值.你可以让你的类型符合这一点,但我认为从你的用户隐藏它并且只是为内部表示创建一个私有类更清晰,如下所示:
struct Foo {    var a : String    var b : String?}extension Foo {    init?(data: NSData) {        if let Coding = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? EnCoding {            a = Coding.a as String            b = Coding.b as String?        } else {            return nil        }    }    func encode() -> NSData {        return NSKeyedArchiver.archivedDataWithRootObject(EnCoding(self))    }    private class EnCoding: NSObject,NSCoding {        let a : Nsstring        let b : Nsstring?        init(_ foo: Foo) {            a = foo.a            b = foo.b        }        @objc required init?(coder aDecoder: NSCoder) {            if let a = aDecoder.decodeObjectForKey("a") as? Nsstring {                self.a = a            } else {                return nil            }            b = aDecoder.decodeObjectForKey("b") as? Nsstring        }        @objc func encodeWithCoder(aCoder: NSCoder) {            aCoder.encodeObject(a,forKey: "a")            aCoder.encodeObject(b,forKey: "b")        }    }}

然后,为了保存您的阵列,您只需将.encode映射到您的阵列:

let fooArray = [ Foo(a: "a",b: "b"),Foo(a: "c",b: nil) ]let encoded = fooArray.map { 
let dataArray = NSUserDefaults.standardUserDefaults().objectForKey("my-key") as! [NSData]let savedFoo = dataArray.map { Foo(data: )! }
.encode() }NSUserDefaults.standardUserDefaults().setobject(encoded,forKey: "my-key")

为了得到它,你可以简单地将NSData传递给init:

[+++] 总结

以上是内存溢出为你收集整理的数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?全部内容,希望文章能够帮你解决数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?_app_内存溢出

数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?

数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?,第1张

概述我有一个名为’News’的自定义结构,我想将其附加到NSUserDefault的数组中.但它显示错误“类型’新闻’不符合协议’AnyObject’”. 我不想将’News’结构更改为类,因为它已经被用于其他代码.无论如何我可以将NSUserDefaults.standardUserDefaults().arrayForKey(“savedNewsArray”)类型更改为[新闻]? var save 我有一个名为’News’的自定义结构,我想将其附加到NSUserDefault的数组中.但它显示错误“类型’新闻’不符合协议’AnyObject’”.

我不想将’News’结构更改为类,因为它已经被用于其他代码.无论如何我可以将NSUserDefaults.standardUserDefaults().arrayForKey(“savednewsArray”)类型更改为[新闻]?

var savednews = NSUserDefaults.standardUserDefaults().arrayForKey("savednewsArray")var addSavednews = savednews as? [News]addSavednews.append(News(ID: "00",Title: newsTitle,source: source,imageURL: imageURL,url: url))NSUserDefaults.standardUserDefaults().setobject(addSavednews,forKey: "savednewsArray")NSUserDefaults.standardUserDefaults().synchronize()

这是’新闻’结构.

public struct News {    public var ID: String    public var Title: String    public var source: String?    public var imageURL: String?    public var date: NSDate?    public var url: String    init(ID: String,Title: String,source: String,imageURL: String,url: String) {        self.ID = ID        self.Title = Title        self.source = source        self.imageURL = imageURL        self.url = url    }}
NSUserDefaults只能保存一小组类型:NSData,Nsstring,NSNumber,NSDate,仅包含这些类型的NSArray,或仅包含这些类型的NSDictionary.因此,最好的办法是使用NSKeyedUnarchiver对结构进行编码,这需要一个符合NSCoding的值.你可以让你的类型符合这一点,但我认为从你的用户隐藏它并且只是为内部表示创建一个私有类更清晰,如下所示:
struct Foo {    var a : String    var b : String?}extension Foo {    init?(data: NSData) {        if let Coding = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? EnCoding {            a = Coding.a as String            b = Coding.b as String?        } else {            return nil        }    }    func encode() -> NSData {        return NSKeyedArchiver.archivedDataWithRootObject(EnCoding(self))    }    private class EnCoding: NSObject,NSCoding {        let a : Nsstring        let b : Nsstring?        init(_ foo: Foo) {            a = foo.a            b = foo.b        }        @objc required init?(coder aDecoder: NSCoder) {            if let a = aDecoder.decodeObjectForKey("a") as? Nsstring {                self.a = a            } else {                return nil            }            b = aDecoder.decodeObjectForKey("b") as? Nsstring        }        @objc func encodeWithCoder(aCoder: NSCoder) {            aCoder.encodeObject(a,forKey: "a")            aCoder.encodeObject(b,forKey: "b")        }    }}

然后,为了保存您的阵列,您只需将.encode映射到您的阵列:

let fooArray = [ Foo(a: "a",b: "b"),Foo(a: "c",b: nil) ]let encoded = fooArray.map { 
let dataArray = NSUserDefaults.standardUserDefaults().objectForKey("my-key") as! [NSData]let savedFoo = dataArray.map { Foo(data: )! }
.encode() }NSUserDefaults.standardUserDefaults().setobject(encoded,forKey: "my-key")

为了得到它,你可以简单地将NSData传递给init:

总结

以上是内存溢出为你收集整理的数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?全部内容,希望文章能够帮你解决数组 – 如何使用swift将自定义结构数组保存到NSUserDefault?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存