• swift4之String与NSString的区别与使用


    String是结构体,NSString是类,这是它们的根本区别。

    在 Swift 中,结构体struct是值类型,String是结构体,所以也是值类型。值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。

    类class是引用类型,NSString是类,所以也是引用类型。与值类型不同,引用类型在被赋予到一个变量、常量或者被传递到一个函数时,其值不会被拷贝。因此,引用的是已存在的实例本身而不是其拷贝。

    一、String 与 NSString 的区别
    String 与 NSString 各自有自身独特的API,需要用到自身没有的API时可以相互转换。

    1.1 String独有的API
       · 初始化一个String变量str:

    var str = String()
    str = "54321-bca"


      · String的isEmpty属性: 

    ///判断是否为空
    str.isEmpty//false
      · String的sorted方法:

    ///字符串排序并输出字符的数组

    str.sorted()//["-", "1", "2", "3", "4", "5", "a", "b", "c"]


      · String的filter方法(把不想要的字符过滤掉):

    str = " St ri ng "



    //方法1-完整闭包

    let strFiltered = str.filter { (charater) -> Bool in
    charater != " "
    }
    print(strFiltered)//”String“


    //方法2-简化版

    let strFiltered2 = str.filter{ $0 != " " }
    print(strFiltered2)//”String“
      · String的enumerated方法:
    
    str = "String"
    
    for (index,value) in str.enumerated() {
    print("(index)-(value)")
    }
    /*
    0-S
    1-t
    2-r
    3-i
    4-n
    5-g
    */

    1.2 NSString独有的API
    · 初始化一个NSString变量nsstr:

    var nsstr = NSString()
    nsstr = "54321"



     · NSString的boolValue属性:

    ///判断第一个字符,首字符为 YyT 数字 返回true,否则返回false

    nsstr.boolValue//true


     · NSString的isEqual属性: 

    ///判断两个字符串是否相等

    nsstr.isEqual(to: "54321")//true


     · NSString的integerValue属性: 

    ///把字符串转成整型Int,若不能转成Int则返回0
    nsstr.integerValue//54321
     

    1.3 String与NSString的API不同,用法相同
    · 初始化一个String变量str,一个NSString变量nsstr:

    var str = String()
    var nsstr = NSString()
    str = "54321-bca"
    nsstr = "54321-ns"


     · 获取字符串的字符数量(String用count关键字,NSString用length关键字)

    ///获取字符串数量

    str.count//9
    nsstr.length//8


      · 字符串的截取(String截取完成返回Substring,NSString截取完成返回String)

    ///结果返回Substring

    str.prefix(str.count-2)//"54321-b"
    str.prefix(while: {"0"..."5" ~= $0})//"54321"
    str.suffix(3)//"bca"
    str.dropLast(4)//"54321"
    str.dropFirst(2)//"321-bca"



    ///结果返回String

    nsstr.substring(to: nsstr.length-3)//"54321"
    nsstr.substring(from: 6)//"ns"
    nsstr.substring(with: NSMakeRange(1, 4))//"4321"


     · 添加字符到字符串结尾 (String是添加字符到自身,NSString是返回一个新的String,自身不变)

    str.append("s")//()
    print(str)//"54321-bcas"



    //NSString不改变原来变量

    let nsstr1 = nsstr.appending("s")
    print(nsstr1)//"54321nss"
    print(nsstr)//"54321ns"


    二、String 与 NSString 的共同用法
       · 初始化一个String变量str,一个NSString变量nsstr:

    var str = String()
    var nsstr = NSString()
    str = "54321-bca"
    nsstr = "54321-ns"


      · 检查字符串是否含有特定的前缀/后缀

    ///检查字符串是否含有特定的前缀/后缀

    str.hasPrefix("54")//true
    str.hasSuffix("ca")//true
    
    nsstr.hasPrefix("543")//true
    nsstr.hasSuffix("ns")//true


     · 使用特定字符拆分字符串并输出数组 

    ///使用特定字符拆分字符串并输出数组

    str.components(separatedBy: "-")//["54321", "bca"]
    
    nsstr.components(separatedBy: "-")//["54321", "ns"]


     · 把字符串中的字母大小写转换 

    ///大小写字母转换(结果都返回String)

    str.uppercased()//"54321-BCA“
    str.lowercased()//"54321-bca”
    
    nsstr.uppercased//"54321-NS“
    nsstr.lowercased//"54321-ns"


     · 把字符串中的单词首字母变大写

    ///首字母大写(结果都返回String)

    str.capitalized//"54321-Bca"
    
    nsstr.capitalized//"54321-Ns"
     

     · 把字符串前后不想要的字符去掉并返回一个新的String。不想要的字符可以是 空格.whitespaces  换行符.newlines 数字.decimalDigits 字母.letters  大写字母.uppercaseLetters 等等。

    str = " 
     54321-n "
    nsstr = "
     54321-ns "



    ///把字符串前后的空格和换行符去掉并返回一个新的String

    let strTrimed = str.trimmingCharacters(in: .whitespacesAndNewlines)
    print(str)//" 
     54321-n "
    print(strTrimed)//"54321-n"
    
    let nsstrTrimed = nsstr.trimmingCharacters(in: .whitespacesAndNewlines)
    print(nsstr)//"
     54321-ns "
    print(nsstrTrimed)//"54321-ns"


     · 把十十六八进制数字转字符串

    //结果返回String

    let hexStr = String().appendingFormat("%x",16)//十进制转十六进制,结果为"10"
    let oStr = String().appendingFormat("%o",16)//十进制转八进制,结果为"20"
    let dStr = String().appendingFormat("%d",0x10)//十六进制转十进制,结果为"16"
    let dStr1 = String(format: "%d", 0o10)//八进制转十进制,结果为"8"



    //结果返回NSString

    let hexNSStr = NSString().appendingFormat("%x", 16)//十进制转十六进制,结果为"10"
    let oNSStr = NSString().appendingFormat("%o",16)//十进制转八进制,结果为"20"
    let dNSStr = NSString().appendingFormat("%d",0x10)//十六进制转十进制,结果为"16"
    let dNSStr1 = NSString(format: "%d", 0o10)//八进制转十进制,结果为"8"


    · 字符替换(如果想替换的字符找不到,则返回原来字符串)

    str = "hello S"
    nsstr = "hello NS"
    
    let StrReplaced = str.replacingOccurrences(of: "S", with: "amberoot")
    print(StrReplaced)//"hello amberoot"
    
    let NSStrReplaced = nsstr.replacingOccurrences(of: "NS", with: "amberoot")
    print(NSStrReplaced)//"hello amberoot

    这位兄弟总结的不错。


    原文链接:https://blog.csdn.net/amberoot/article/details/88847596

  • 相关阅读:
    translations.dart阅读
    # objc-weak 阅读
    Objective-C Runtime2.0(-)
    iOS图文混排
    BestCoder Round #85 抽屉原理/贪心/质因数
    hdu 5763 Another Meaning KMP+DP(多校)
    hdu 5775 Bubble Sort 树状数组(多校)
    BestCoder Round #84
    hdu 5724 SG函数+状压(多校)
    hdu 5723 最小生成树+dfs (多校)
  • 原文地址:https://www.cnblogs.com/jiduoduo/p/12105669.html
Copyright © 2020-2023  润新知