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

本系列第三篇,String相关的类型转换。其他的几篇传送门:

虽然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()的替代品!

你看到的是非授权版本!爬虫凶猛,请尊重知识产权!

转载请注明出处:http://conanwhf.github.io/2015/12/03/Swift_String_3/

访问原文「Swift2.0 中的String(三):类型转换」获取最佳阅读体验并参与讨论

// 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")