• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift与指针初级使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

swift 里面对应C 的基础类型前面加C,CInt、CBool和CChar

UnsafePointer<CChar> 对应C的 const char *;常量指针不可变

UnsafeMutablePointer<CChar> 对应C的 char *;可变指针

下面第一行为String 转 char*;第二行为char* 转String

let sss = UnsafePointer<CChar>("char string..".cStringUsingEncoding(NSUTF8StringEncoding))

print(String.fromCString(sss))

 

比如下面使用C语言objc/runtime遍历当前类中所有成员变量,使用了UnsafeMutablePointer<UInt32>,对应C里面 unsigned int *varCount

let varCount:UnsafeMutablePointer<UInt32> = UnsafeMutablePointer<UInt32>.alloc(1)
varCount.initialize(0)
let classVars = class_copyIvarList(self.classForCoder, varCount)
for i in 0 ... (Int(varCount.memory)-1){
  let c:Ivar = classVars[i]
  let name = ivar_getName(c)
  let ncc = UnsafePointer<CChar>(
  let nsc
= String.fromCString(ncc)   print(nsc)
  let type
= ivar_getTypeEncoding(c)   let tcc = UnsafePointer<CChar>(type)   let tsc = String.fromCString(tcc)   print(tsc) } free(classVars)

用OC翻译过来可以这样写

unsigned count = 0;
Ivar *vars = class_copyIvarList(c, &count);
for (int i = 0; i < count; i++) {
    Ivar v = vars[i];
    const char *name = ivar_getName(v);
    const char *nameType = ivar_getTypeEncoding(v);
    NSLog(@"==%s==",name);
    NSLog(@"==%s==",nameType);
    NSString *sname = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
}
free(vars);

 

swift中UnsafePointer<T>可以用.memory取得指针指向的值

let ss: UnsafePointer<CChar> = UnsafePointer<CChar>("b".cStringUsingEncoding(NSUTF8StringEncoding))
NSLog("%c-%d", 67, ss.memory)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift3.0之自定义debug阶段控制台打印发布时间:2022-07-13
下一篇:
孟加拉央行SWIFT攻击事件恶意木马分析(转)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap