
获得徽章 0
赞了这篇沸点
赞了这篇沸点
赞了这篇沸点
#iOS知识小集# 「 Swift 中导入 C union 类型 」
Swift 中没有联合(union)的概念,而在 C 代码中经常会出现联合体。在 Swift 与 C 混合编程中,Swift 会将 C 联合体视作 Swift 结构体来导入。如以下 C union:
union SchroedingersCat {
bool isAlive;
bool isDead;
};
导入 Swift 中是如下形式:
struct SchroedingersCat {
var isAlive: Bool { get set }
var isDead: Bool { get set }
init(isAlive: Bool)
init(isDead: Bool)
init()
}
需要注意的是,虽然 SchroedingersCat 在 Swift 中是结构体,但它的行为依然表现得像联合体一样。也就是说,Swift 中的 SchroedingersCat 结构体的所有计算属性都是使用相同的底层内存,更改其中一个属性值时,会影响到所有其它属性的值。如下代码所示:
var mittens = SchroedingersCat(isAlive: false)
print(mittens.isAlive, mittens.isDead)
// Prints "false false"
mittens.isAlive = true
print(mittens.isDead)
// Prints "true"
Swift 中没有联合(union)的概念,而在 C 代码中经常会出现联合体。在 Swift 与 C 混合编程中,Swift 会将 C 联合体视作 Swift 结构体来导入。如以下 C union:
union SchroedingersCat {
bool isAlive;
bool isDead;
};
导入 Swift 中是如下形式:
struct SchroedingersCat {
var isAlive: Bool { get set }
var isDead: Bool { get set }
init(isAlive: Bool)
init(isDead: Bool)
init()
}
需要注意的是,虽然 SchroedingersCat 在 Swift 中是结构体,但它的行为依然表现得像联合体一样。也就是说,Swift 中的 SchroedingersCat 结构体的所有计算属性都是使用相同的底层内存,更改其中一个属性值时,会影响到所有其它属性的值。如下代码所示:
var mittens = SchroedingersCat(isAlive: false)
print(mittens.isAlive, mittens.isDead)
// Prints "false false"
mittens.isAlive = true
print(mittens.isDead)
// Prints "true"
展开
评论
3
赞了这篇文章
赞了这篇文章
赞了这篇沸点
赞了这篇沸点
赞了这篇沸点
赞了这篇沸点
使用 Vim 搭建 lua 的开发环境,包括启动代码补全、语法检查、格式、code runner、repl以及查询def和ref;
评论
4
赞了这篇沸点
赞了这篇沸点
赞了这篇沸点