zoukankan      html  css  js  c++  java
  • 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")
    
  • 相关阅读:
    最终作业
    第十二次作业
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
    Beta 冲刺(5/7)
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
    Beta 冲刺(2/7)
    Beta 冲刺(1/7)
    福大软工 · 第十次作业
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6010843.html
Copyright © 2011-2022 走看看