Swift2.0 中的String(三):类型转换

本系列第三篇,String相关的类型转换。其他的几篇传送门(GitHub打不开链接的同学请自行把地址github改成gitcafe,或者直接去归档里找:-P):

虽然Swift是强类型语言,但简单的String类型转换其实还是比较方便的,最暴力的就是强制类型转换,百试百灵:

func toString<T>(a: T) -> String{
    // Way one, format
    //return "\(a)"
    // Way two, new string
    return String(a)
}
toString(123)
toString(0.007)
toString([4, 8, 32, 5 ])
toString("test".startIndex)

同样照葫芦画瓢也能转回来:

Int("123")
Float("3.1")

但这个太简单、太有局限性了!我最喜欢的是下面这个,利用了New的时候format方法,简直就是 sprintf() 的替代品!

// Way 1, 格式化转String
String(format:"%i,  0x%x,  0o%o,  %.2f", 31, 31,  31, 3.1)
// Way 2
String().stringByAppendingFormat("%x",31)
String().stringByAppendingFormat("%o",31)

同样的,有了sprintf(),怎么能没有 sscanf() ??

//十六进制String转整数
var res:UInt32   = 0
NSScanner.localizedScannerWithString(str).scanHexInt(&res)

当然,这个用起来就要麻烦许多,类似的一堆API:

    NSScanner.localizedScannerWithString(str).scanInt(&res)
    NSScanner.localizedScannerWithString(str).scanFloat(&res)
    NSScanner.localizedScannerWithString(str).scanDouble(&res)
    NSScanner.localizedScannerWithString(str).scanInteger(&res)
NSScanner.localizedScannerWithString(str).scanHexFloat(&res)

最后,虽然ASCII码现在不大常用了,但我这种老人家还是很喜欢……写个ASCII码的转换函数吧:

/**
ASCII value to char
*/
func ASCII ( n : Int) -> String? {
    guard (n >= 0 && n < 255 ) else {
    return nil
    }
return String(format:"%c", n)
}

/**
ASCII char to int value
*/
func ASCII (c : String) -> Int8?{
    let str:NSString = c
    let n = str.UTF8String[0]
    guard n>=0 else {
        return nil
    }
    return n
}

ASCII(70)
ASCII("B")
posted @   brave-sailor  阅读(1191)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2015-10-29 使用storyboard实现页面跳转,简单的数据传递
2015-10-29 iOS viewController添加导航条以及返回跳转选择
2015-10-29 IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例
2014-10-29 命令行运行android模拟器
2013-10-29 Use a layout_width of 0dip instead of fill_parent for better performance
2013-10-29 Android中getLocationOnScreen和getLocationInWindow 获取屏幕大小
2013-10-29 Android Scroller类的详细分析
点击右上角即可分享
微信分享提示