相关疑难解决方法(0)

将Struct保存到UserDefaults

我有一个结构,我想保存到UserDefaults.这是我的结构

struct Song {
    var title: String
    var artist: String
}

var songs: [Song] = [
    Song(title: "Title 1", artist "Artist 1"),
    Song(title: "Title 2", artist "Artist 2"),
    Song(title: "Title 3", artist "Artist 3"),
]
Run Code Online (Sandbox Code Playgroud)

在另一个ViewController中,我有一个附加到这个结构的UIButton

@IBAction func likeButtonPressed(_ sender: Any) {   
   songs.append(Song(title: songs[thisSong].title, artist: songs[thisSong].artist))
}
Run Code Online (Sandbox Code Playgroud)

我想要它,以便每当用户也点击该按钮时,它会将结构保存到UserDefaults,这样每当用户退出应用程序然后打开它时,它就会被保存.我该怎么做?

struct nsuserdefaults ios swift

50
推荐指数
4
解决办法
2万
查看次数

如何将数组转换为元组?

我只想将数组转换为Swift中的元组; 类似以下内容:

>>> myArray = [1,2,3,4,5]
>>> mytuple = tuple(myArray)
>>> mytuple
(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么?

(我今天才开始学习Swift,所以我非常非常新).

arrays tuples type-conversion swift

15
推荐指数
2
解决办法
8065
查看次数

'bytes'不可用:改为使用withUnsafeBytes

以前在Swift 2.2中工作的代码现在在Swift 3中抛出以下错误:

在此输入图像描述

这是我的代码:

let tempData: NSMutableData = NSMutableData(length: 26)!
tempData.replaceBytes(in: NSMakeRange(0, data.count), withBytes:data.bytes)
Run Code Online (Sandbox Code Playgroud)

我应该用什么来代替"data.bytes"来修复错误?我已经尝试实现'withUnsafeBytes'并查看了Apple的文档,但无法理解它!

nsdata ios swift

11
推荐指数
1
解决办法
4711
查看次数

使用Swift从NSData获取数据

我发现SwiftNSData成为一种沮丧的邪恶婚姻.我发现每次处理这件事情时,我觉得所有新发现的Swift安全都会消失.崩溃的数量(没有帮助的痕迹)没有帮助.

所以,我已经了解到,我可以UnsafeMutablePointer通过执行以下操作来避免可怕的事情:

var bytes = [UInt8](count: 15, repeatedValue: 0)
anNSData.getBytes(&bytes, length=15)
Run Code Online (Sandbox Code Playgroud)

我还发现,我可以直接提取到奇异值:

var u32:UInt32 = 0
anNSData.getBytes(&u32, length=4)
Run Code Online (Sandbox Code Playgroud)

这导致两个中间问题:

1)我可以使用哪些东西比那里的硬编码常量更可靠.如果这是C,我只是用sizeof.但我觉得我读,也许我应该使用strideof代替sizeof?这不会起作用[UInt8],不是吗?

2)文档(对于Swift)说这个参数应该是_ buffer: UnsafeMutablePointer<Void>.那么这是如何工作的呢?我刚刚幸运吗?为什么我要这样做而不是更原生/托管[Uint8]构造?我想知道是否UnsafeMutablePointer是一个协议,但它是一个结构.

大胆地直接读取值(而不是数组),我想也许我可以尝试另一种结构.我有一个6字节的结构,看起来像:

struct TreeDescription : Hashable {
    var id:UInt32 = 0x00000000
    var channel:UInt8 = 0x00
    var rssi:UInt8 = 0x00

    var hashValue:Int {
        return Int(self.id)
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个实际上有效(在认为它没有,但最终做了一个干净,使一些崩溃消失)!

var tree = TreeDescription()
anNSData.getBytes(&newTree, length: 6)
Run Code Online (Sandbox Code Playgroud)

但这让我担心结构包装细节?为什么这样做?这件事我应该担心什么?

这一切对我来说都很有趣.我认为Swift从C中取出了ObjectiveC.

struct nsdata swift swift2

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

标签 统计

swift ×4

ios ×2

nsdata ×2

struct ×2

arrays ×1

nsuserdefaults ×1

swift2 ×1

tuples ×1

type-conversion ×1