有人告诉我将代码从 obj-c 翻译成 swift。不幸的是,我只学习了 Swift。请帮我翻译。
对象-c:
struct {
unsigned int didDoneClicked : 1;
unsigned int didCancelClicked : 1;
} _delegateFlags;
这就是我所做的:
struct _delegateFlags {
didDoneClicked: Int = 1
didCancelClicked: Int = 1
}
我真的不明白什么是“未签名”。告诉我如何使它更正确
整数类型可以有符号(带有负数和正数)或无符号(只有正数)。互联网上有很多关于整数类型的文档,你应该阅读它。
无符号整数通常用于存储计数器,因为它们总是正数。
Swift 中的等价物unsigned int
是UInt
.
正确的方法是:
struct DelegateFlags {
var didDoneClicked: UInt
var didCancelClicked: UInt
}
请注意,您应该var
在 Swift 中使用关键字。此外,如果您想匹配Swift 样式指南,您应该删除大写首字母的下划线。
这个结构看起来像一个 C 位域,用于以一种内存有效的方式存储布尔值,通过将信息存储在 1 位而不是 8 位。
如果你想匹配确切的 C 内存模式,Swift 的方法是:
struct DelegateFlags: OptionSet {
var rawValue: UInt
static let didDoneClicked = DelegateFlags(rawValue: 1 << 0)
static let didCancelClicked = DelegateFlags(rawValue: 1 << 1)
}
但是,如果您需要一个更简单的结构,但比我介绍的第一个结构更有效,这里有一个替代方案:
struct DelegateFlags {
var didDoneClicked: Bool
var didCancelClicked: Bool
}
第一个结构是 16 字节,第二个是 8 字节(UInt8
尽管可以做成 1 字节),最后一个是 2 字节。随着案例数量的增加,第二个将是最有效的(内存比最后一个少 8 倍,比第一个少 64 倍)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句