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
没有咋看懂。
Swift-05-SizeOf&&SizeOfValue的更多相关文章
- Swift 05.Block
Swift的函数用法还真是灵活.但是个人感觉更灵活的还是闭包. swift闭包的概念大抵相当于OC的block的概念.如果对于block的理解很透彻的话,闭包的原理性的东西还是很好理解的. 剩下的就是 ...
- Swift - 05 - 数值型字面量
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Swift Standard Library: Documented and undocumented built-in functions in the Swift standard library – the complete list with all 74 functions
Swift has 74 built-in functions but only seven of them are documented in the Swift book (“The Swift ...
- Swift中共有74个内建函数
Swift中共有74个内建函数,但是在Swift官方文档(“The Swift Programming Language”)中只记录了7中.剩下的67个都没有记录. 本文将列举Swift所有的内建 ...
- Swift的74标准功能
Swift中共同拥有74个内建函数,可是在Swift官方文档("The Swift Programming Language")中仅仅记录了7中.剩下的67个都没有记录. 本文将列 ...
- 【iOS】swift 74个Swift标准库函数
本文译自 Swift Standard Library: Documented and undocumented built-in functions in the Swift standard li ...
- 74个Swift标准库函数
74个Swift标准库函数 本文译自 Swift Standard Library: Documented and undocumented built-in functions in the Swi ...
- Happy Swifting!
Happy Swifting! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...
- Swift游戏实战-跑酷熊猫 05 踩踏平台是怎么炼成的
这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台的组成 我们的平台由3部分组成 左: 中: 右: 其中中间部分是可以无缝衔接的,下面就是两个中间部分衔接在一起 要任何长度的平台 ...
- Swift 学习- 05 -- 集合类型
// 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重 ...
随机推荐
- More about dubbo
一.前言 dubbo 作为分布式服务框架支持丰富的配置和扩展方式,其中包括:通讯协议.并发控制.多版本服务.结果缓存.泛化引用\实现.回声测试.上下文信息.事件通知.路由规则(可用于实现读写分离)等多 ...
- java定时器的使用
定时器类Timer在java.util包中.使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后 ...
- Shtml妙用
shtml用的是SSI指令, SSI指令虽然不多 但是功能相对而言还是很强大的, 在PHP禁止了命令执行函数和开了安全模式的时候可以试试看 也可以在服务器允许上传shtml后缀脚本的时候试试 PS:只 ...
- maven--私服的搭建(Nexus的使用)
Nexus常用功能就是:指定私服的中央地址.将自己的Maven项目指定到私服地址.从私服下载中央库的项目索引.从私服仓库下载依赖组件.将第三方项目jar上传到私服供其他项目组使用. 开启Nexus服务 ...
- 小组项目alpha发布的评价
新蜂团队一直都特别努力,这节课我也看到了他们努力的结果--项目可以顺利运行,在两个同学试玩期间没有出现BUG,不知道玩游戏的同学的心情,反正我们在台下看得很开心的. 飞天小女警组的礼物挑选系统,是一个 ...
- Redis在windows环境下的部署
一.下载 官网地址:http://redis.io/download Git地址:https://github.com/MSOpenTech/redis 注:官方无windows版本,需要window ...
- Ubuntu/linux 安装 kernel-devel
这个问题,需要安装与系统内核配套的开发包. 查看内核: uname -r 内核头文件C header files下载地址: http://rpmfind.net/linux/rpm2html/sear ...
- Cent OS 6.6 下安装mysql(5.5.20)和 PHP(5.3.10)
0.准备步骤(没有连接网络的 linux): 挂载光盘.让网络 yum 源失效.修改光盘 yum 文件.安装 c 语言编译器 gcc. 1.MySQL(5.5.20) 下载 mysql 5.5.20 ...
- Mac OS X 中安装JDK 7
通过Mac系统的更新安装Java的版本均为JDK 6的版本,如果想要在Mac上安装JDK 7,就需要到Oracle的网站上去下载相应的安装包. 下面为详细教程: 最新版本为JDK8,目前需求JDK7够 ...
- C#winform中ListView及ContextMenuStrip的使用
1.新建一个Windows窗体应用程序 2.添加文件夹及图片资源 文件夹图片(folder.png),文件图片(file.png) 3.在设计模式下添加控件 即:1个ListView(lvwData) ...