gpt4 book ai didi

swift - 如何更改 Swift 结构属性顺序?

转载 作者:可可西里 更新时间:2023-11-01 00:35:38 24 4
gpt4 key购买 nike

在我的案例中,我有一个结构,它是 User

具有属性的示例结构(出于示例目的,它只有几个属性)。

struct User {
var name:String?
var email:String?
}

现在我正在创建具有特定字段顺序(电子邮件、姓名)的 User 结构。

var user = User()
user.email = "Oleg@gmail.com"
user.name = "Oleg"

现在我正在对结构进行 dump 以查看属性顺序。

dump(user)

▿ __lldb_expr_21.User
▿ name: Optional("Oleg")
- some: "Oleg"
▿ email: Optional("Oleg@gmail.com")
- some: "Oleg@gmail.com"

那么是否可以将结构属性顺序更改为与我添加它们的顺序相同?或者我应该使用 Array 来保存属性顺序?

dump 的预期结果是:

▿ __lldb_expr_25.User
▿ email: Optional("Oleg@gmail.com")
- some: "Oleg@gmail.com"
▿ name: Optional("Oleg")
- some: "Oleg"

最佳答案

structs 的内存布局算法尚未具体确定。它在 SR-3723 中被跟踪.由于各种原因,它在未来很可能会发生变化:

  • 如果编译器不受限于保留顺序,则成员可以更紧密地打包,从而减少为满足对齐约束而在填充中浪费的内存
  • 成员可以紧密打包,以便为常用操作提供更好的局部性(从而提高缓存性能)

重点是,您应该绝对将自己与结构的内存布局隔离开来。它们的布局可以在 Swift 的任何 future 版本中更改,您不希望这破坏您的程序。

从评论来看,您的问题似乎与结构的内存布局完全无关,而是它们的变量在您记录它们时出现的方式。这是您可以自己定义的内容:

struct User {
let name: String
let email: String
}

extension User: CustomStringConvertible {
var description: String {
return "your custom description"
}
}

关于swift - 如何更改 Swift 结构属性顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44624813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com