相关疑难解决方法(0)

如何在swift中使用NSCoder编码枚举?

背景

我正在尝试使用NSCoding协议对String样式的枚举进行编码,但是我遇到了从String转换回来的错误.

解码和编码时出现以下错误:

字符串不可转换为Stage

额外参数ForKey:在电话中

    enum Stage : String
    {
        case DisplayAll    = "Display All"
        case HideQuarter   = "Hide Quarter"
        case HideHalf      = "Hide Half"
        case HideTwoThirds = "Hide Two Thirds"
        case HideAll       = "Hide All"
    }

    class AppState : NSCoding, NSObject
    {
        var idx   = 0
        var stage = Stage.DisplayAll

        override init() {}

        required init(coder aDecoder: NSCoder) {
            self.idx   = aDecoder.decodeIntegerForKey( "idx"   )
            self.stage = aDecoder.decodeObjectForKey(  "stage" ) as String    // ERROR
        }

        func encodeWithCoder(aCoder: NSCoder) {
            aCoder.encodeInteger( …
Run Code Online (Sandbox Code Playgroud)

enums persistence nscoder swift

63
推荐指数
3
解决办法
2万
查看次数

在扩展之间共享UserDefaults

创建Today小部件,我UserDefaults(suiteName:)用来保存一些数据.在我正在使用的主要应用程序中UserDefaults.standard().这是扩展无法读取(或可以吗?),这就是我使用suiteName:构造函数的原因.

用户UserDefaults.standard()在主应用中持久保存的数据需要在扩展中可用.

在这个时候,我坚持两者,以便可以共享价值观

 UserDefaults.standard().set:...forKey:...
 UserDefaults(suiteName:...)().set:...forKey:...
 ...
Run Code Online (Sandbox Code Playgroud)

问题是我应该UserDefaults.standard()放在一起,只是UserDefaults(suiteName:)在我的应用程序中使用,或者这是不好的做法,如果是这样,为什么?

编辑:我正在使用App组容器.为了澄清我要问我应该在我的项目中用suiteName替换standard()吗?

swift today-extension userdefaults ios10-today-widget

23
推荐指数
4
解决办法
1万
查看次数

Swift结构化到NSData并返回

我有一个结构包含一个结构NSObject,我想序列化到一个NSData对象:

struct Packet {
  var name: String
  var index: Int
  var numberOfPackets: Int
  var data: NSData
}

var thePacket = Packet(name: name, index: i, numberOfPackets: numberOfPackets, data: packetData)
Run Code Online (Sandbox Code Playgroud)

我如何最好地将数据包序列化为一个NSData,以及如何最好地将其反序列化?

运用

var bufferData = NSData(bytes: & thePacket, length: sizeof(Packet))
Run Code Online (Sandbox Code Playgroud)

只给了我名字和数据的指针.我正在探索NSKeyedArchiver,但后来我必须使Packet成为一个对象,我宁愿保持它的结构.

干杯

serialization struct nskeyedarchiver nsdata swift

18
推荐指数
3
解决办法
2万
查看次数

为Swift编码/解码枚举(Xcode 6.1)

我有

var priority : Priority! = Priority.defaultPriority

func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeInteger(priority.toRaw(), forKey: "priority") //toRaw may not yield the result I am expecting
    }

    required init(coder aDecoder: NSCoder) {
        priority = aDecoder.decodeIntegerForKey("priority") //complaining about conflicting types
    }
Run Code Online (Sandbox Code Playgroud)

枚举如下:

enum Priority : Int {
        case defaultPriority = 0
        case lowPriority = 1
        case mediumPriority = 2
        case highPriority = 3
    }
Run Code Online (Sandbox Code Playgroud)

编码/解码这个的最佳方法是什么?

enums ios swift

7
推荐指数
1
解决办法
3439
查看次数

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

我有一个名为'新闻'的自定义结构,我想将其附加到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()
Run Code Online (Sandbox Code Playgroud)

这是'新闻'结构.

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 = …
Run Code Online (Sandbox Code Playgroud)

arrays struct nsuserdefaults swift swift2

5
推荐指数
1
解决办法
5779
查看次数

使用 Swift 将可编码结构保存到 UserDefaults

我正在尝试对结构进行编码

struct Configuration : Encodable, Decodable {
    private enum CodingKeys : String, CodingKey {
        case title = "title"
        case contents = "contents"
    }
    var title : String?
    var contents: [[Int]]?
}
Run Code Online (Sandbox Code Playgroud)

转换成 JSON 以存储在 UserDefaults.standard 的本地键中。我有以下代码:

let jsonString = Configuration(title: nameField.text, contents: newContents)
let info = ["row" as String: jsonString as Configuration]
print("jsonString = \(jsonString)")
//trying to save object
let defaults = UserDefaults.standard
let recode = try! JSONEncoder().encode(jsonString)
defaults.set(recode, forKey: "simulationConfiguration")
//end of saving local
Run Code Online (Sandbox Code Playgroud)

打印返回:

jsonString = Configuration(title: Optional("config"), …
Run Code Online (Sandbox Code Playgroud)

swift userdefaults codable

3
推荐指数
1
解决办法
6557
查看次数