Swift-05-SizeOf&&SizeOfValue

  在C中定义的运算符,可以作用于类型或者某个实际的变量,并返回其在内存中的尺寸size_t.

  在Cocoa中,我们一般用来将数组生成NSData的时候传入数据长度。因为在OC里面,sizeOf这个C运算符被保留了。

char bytes[] = {1, 2, 3};
NSData *data = [NSData dataWithBytes:&bytes length:sizeof(bytes)];

  C中的sizeOf有两个版本,既可以接受类型,也可以接受某个具体的值。

  sizeOf(int)

  sizeOf(a)

  在Swift中,为了保证类型安全,sizeOf经过了一层包装,它不再是运算符,而是一个只能接受类型的方法。

  我们还可以找到一个接受具体值,并返回尺寸的方法:sizeOfValue.这个方法返回的是Int,不是size_t。

var bytes:[CChar] = [1,2,3]
sizeofValue(bytes)
print(sizeofValue(bytes))----》8

  虽然SizeofValue接受的是具体是,但是它和C的接收具体值的版本的sizeof行为并不相同。sizeofValue所返回的是这个值实际的大小,而并非其内容的大小。

  如果我们在Swift中想表示上面的bytes的话,我们会将其类型写为CChar。在C或者OC中,对bytes做sizeof返回的是整个数组内容在内存中占据的尺寸。每个char为1,而数组元素为3,因此这个值是3.在Swift中,我们如果直接对bytes做sizeofValue操作的话,将返回8。

var bytes32:[CChar] = [1,2,3]
print(sizeofValue(bytes32))

  

var bytes44:[CChar] = [1,2,3]
let data = NSData(bytes: &bytes44, length: sizeof(CChar) * bytes44.count)
print(data)

  

print(sizeof(UInt16))
print(sizeof(MyEnum))
print(sizeofValue(MyEnum.A))
print(sizeofValue(MyEnum.A.rawValue))

2
1
1
2

  没有咋看懂。

时间: 2024-10-22 23:09:39

Swift-05-SizeOf&&SizeOfValue的相关文章

Swift 05.Block

Swift的函数用法还真是灵活.但是个人感觉更灵活的还是闭包. swift闭包的概念大抵相当于OC的block的概念.如果对于block的理解很透彻的话,闭包的原理性的东西还是很好理解的. 剩下的就是灵活多变的用法了.在学习闭包之前,我还是想从新再总结一下block的原理和用法.毕竟闭包用好了真是简化了好多东西. ...今天总结完毕 block和闭包

Swift的74标准功能

Swift中共同拥有74个内建函数,可是在Swift官方文档("The Swift Programming Language")中仅仅记录了7中.剩下的67个都没有记录. 本文将列举Swift全部的内建函数.本文中提到的所谓的内建函数是指那些在Swift中不须要导入不论什么模块(如Foundation等)或者引用不论什么类就能够使用的函数. abs(signedNumber): 返回给定的有符号数字的绝对值. 非常easy.可是没有在文档中记录. abs(-1) == 1 abs(-4

Swift标准函数

abs(signedNumber): 返回给定的有符号数字的绝对值. abs(-1) == 1 abs(-42) == 42 abs(42) == 42 contains(sequence, element): 如果给定的序列(如数组)包含特定的元素,则返回true,否则返回false. var languages = ["Swift", "Objective-C"] contains(languages, "Swift") == true co

Swift的74个标准函数

Swift中共有74个内建函数,但是在Swift官方文档("The Swift Programming Language")中只记录了7中.剩下的67个都没有记录. 本文将列举Swift所有的内建函数.本文中提到的所谓的内建函数是指那些在Swift中不需要导入任何模块(如Foundation等)或者引用任何类就可以使用的函数. abs(signedNumber): 返回给定的有符号数字的绝对值.很简单,但是没有在文档中记录. abs(-1) == 1 abs(-42) == 42 ab

Swift中共有74个内建函数

Swift中共有74个内建函数,但是在Swift官方文档(“The Swift Programming Language”)中只记录了7中.剩下的67个都没有记录. 本文将列举Swift所有的内建函数.本文中提到的所谓的内建函数是指那些在Swift中不需要导入任何模块(如Foundation等)或者引用任何类就可以使用的函数. abs(signedNumber): 返回给定的有符号数字的绝对值.很简单,但是没有在文档中记录. abs(-1) == 1 abs(-42) == 42 abs(42)

SWIFT学习笔记05

1.Swift 无需写break,所以不会发生这种贯穿(fallthrough)的情况.2.//用不到变量名,可用"_"替换 for _ in 1...power { answer *= base } 3.case 可以匹配更多的类型模式,包括区间匹配(range matching),元组(tuple)和特定类型的描述. 可以这样用case case 1...3: naturalCount = "a few" 4.如果存在多个匹配,那么只会执行第一个被匹配到的 ca

Swift游戏实战-跑酷熊猫 05 踩踏平台是怎么炼成的

原文:Swift游戏实战-跑酷熊猫 05 踩踏平台是怎么炼成的 这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台的组成 我们的平台由3部分组成 左: 中: 右: 其中中间部分是可以无缝衔接的,下面就是两个中间部分衔接在一起 要任何长度的平台,就只需要增加中间模块. 前后能衔接的中间模块的制作: 其实这种左右能够衔接的模块制作过程也很简单 我们只要拿出平台的一半 切出中间部分 然后水平翻转再拼在一起 就完成了中间部分的制作,然后我们把剩余的左边部分再水平翻转,就完成了右边部

[连载]Swift开发入门(05)--- 枚举

??枚举是定义符号常量的手段,它把一堆相似的值组织在一起.例如你在指定文字对齐方式的时候通常有三种可选的值:左对齐.右对齐和居中对齐:你在处理游戏中的方法时可能的取值有东.西.南.北.Swift中的枚举比你了解的其他语言的枚举更加强大,它的行为类似于类和结构体,它甚至可以有自己的方法,包括构造器. 创建枚举 ??我们先通过一个简单的例子来认识一下枚举.玩过扑克牌的都知道,扑克有四种花色,分别是黑桃(spade).红心(heart).草花(club)和方块(diamond),如果我们要做一个扑克游

Swift 学习- 05 -- 集合类型

// 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重复数据的集, 字典(Dictionaries) 是无序的键值对的集 // swift 语言中的 Arrays, Sets 和 Dictionaries 中存储的数据值类型必须明确, 这意味着我们不能把不正确的数据类型插入其中, 同事这也说明我们完全可以取回值的类型非常自信 // 集合的可变性 //