• Swift 官方博客公布了 Swift 5 将首选字符串编码从 UTF-16 切换到 UTF-8 的消息,同时保留与 Objective-C 有效的互操作性。因为 String 类型会对...

    Swift 官方博客公布了 Swift 5 将首选字符串编码从 UTF-16 切换到 UTF-8 的消息,同时保留与 Objective-C 有效的互操作性。因为 String 类型会对这些底层问题进行抽象,所以开发者不需要对源代码进行更改。

    切换到 UTF-8 实现了 String 的长期目标之一 —— 实现高性能处理,这也是关注性能的开发者呼声最大的请求。更重要的是,该功能还为将来提供更高性能的 API 奠定了基础。字符串的首选编码将会成为影响 Swift ABI 性能的一部分,因此这次在 Swift 5 版本中为了 ABI 的稳定性而实现该功能是势在必行的。

    背景

    尽管 String 类型在技术上是同一个结构,但它可以以多种形式存在。我们不妨将 String 视为手工枚举,使用传统的 bit-twiddling 技术手工制作,以生成紧凑高效的代码。

    081542_ZpnY_2720166.png

    由上图可以看到,Swift 5 之前,字符串内容以 UTF-16 和 ASCII 两种形式存储。出于与现代计算环境的高效兼容性、简化相关操作以及对性能提升的考虑,Swift 决定在 Swift 5 中使用 UTF-8 作为首选字符串编码。

    对现有的影响

    按照官方说法,在代码层面,这个变动对大多数开发者的影响不大,并且依然会提供与 Objective-C API 的高效互操作性。

    展开全文
  • Swift3.0语言教程分割字符串 如果想要快速的创建一个数组,我们可以将字符串进行分割,分割后的内容将会生成一个数组。在NSString中有两个分割字符串的方法,分别为components(separatedBy:)方法和components...

    Swift3.0语言教程分割字符串

    如果想要快速的创建一个数组,我们可以将字符串进行分割,分割后的内容将会生成一个数组。在NSString中有两个分割字符串的方法,分别为components(separatedBy:)方法和components(separatedBy:)方法。

    (1)components(separatedBy:)方法是将字符串根据指定的字符串参数进行分割,并将分别的内容转换为一个数组。其语法形式如下:

    func components(separatedBy separator: String) -> [String]

    其中,separator用来指定分割字符串。

    【示例1-67】以下将使用components(separatedBy:)方法将字符串进行分割。

    import Foundation

    var a=NSString(string:"A,B,C,D,E,F")

    print("分割前:\(a)")

    print("分割后:\(a.components(separatedBy: ","))")                                 //分割字符串

    运行结果如下:

    分割前:A,B,C,D,E,F

    分割后:["A", "B", "C", "D", "E", "F"]

    (2)components(separatedBy:)方法是将字符串根据指定的字符编码参数进行分割,并将分别的内容转换为一个数组。其语法形式如下:

    func components(separatedBy separator: CharacterSet) -> [String]

    其中,separator用来指定分割的字符集。

    【示例1-68】以下将使用components(separatedBy:)方法将字符串进行分割。

    import Foundation

    var a=NSString(string:"A*B*C*D*E*F")

    print("分割前:\(a)")

    var b:CharacterSet=NSCharacterSet(charactersIn:"*") as CharacterSet

    print("分割后:\(a.components(separatedBy: b)))")

    运行结果如下:

    分割前:A*B*C*D*E*F

    分割后:["A", "B", "C", "D", "E", "F"])

    Swift3.0语言教程截取字符串

    有时,为了使用现有的字符串生成一个新的字符串,我们可以使用截取字符串的方法实现。在NSString中截取字符串的方法有3种,分别为:substring(from:)、substring(with:)和substring(to:)方法。

    (1)substring(from:)方法的功能是截取指定位置后的字符串,并返回。其语法形式如下:

    func substring(from: Int) -> String

    其中,from用来指定一个索引,这个索引就是位置。

    【示例1-69】以下将使用substring(from:)方法截取字符。

    import Foundation

    var a=NSString(string:"Follow your heart, but be quiet for a while first. Learn to trust your heart.")

    print("截取前:\(a)")

    print("截取后:\(a.substring(from: 50))")                                                      //截取字符串

    运行结果如下:

    截取前:Follow your heart, but be quiet for a while first. Learn to trust your heart.

    截取后: Learn to trust your heart.

    (2)substring(with:)方法是截取指定范围内的字符串,并返回,其语法形式如下:

    func substring(with range: NSRange) -> String

    其中,range用来指定一个范围。

    【示例1-70】以下将使用substring(with:)方法截取字符串。

    import Foundation

    var a=NSString(string:"Follow your heart, but be quiet for a while first. Learn to trust your heart.")

    print("截取前:\(a)")

    print("截取后:\(a.substring(with: NSMakeRange(50, 8)))")                    //截取字符串

    运行结果如下:

    截取前:Follow your heart, but be quiet for a while first. Learn to trust your heart.

    截取后: Learn t

    (3)substring(to:)方法是截取指定位置之前的字符串,其语法形式如下:

    func substring(to: Int) -> String

    其中,to用来指定一个索引。

    【示例1-71】以下将使用substring(to:)方法截取字符串。

    import Foundation

    var a=NSString(string:"Follow your heart, but be quiet for a while first. Learn to trust your heart.")

    print("截取前:\(a)")

    print("截取后:\(a.substring(to: 20))")                                                  //截取字符串

    运行结果如下:

    截取前:Follow your heart, but be quiet for a while first. Learn to trust your heart.

    截取后:Follow your heart, b

    Swift3.0语言教程分割字符串与截取字符串

    展开全文
  • OC与Swift中的字符串

    2019-02-20 00:37:46
    一般情况下,使用一个旧的字符串对象对一个新声明的字符串对象进行赋值,其实就是新的指针指向同一个字符串对象,也就是指针的拷贝,并没有生成新的字符串。只有对一个可变字符串对象进行拷贝,或者对任意字符串对象...

    一、OC中的字符串

    1. 引用类型

      在Object-C中,使用NSString和NSMutableString这两个类对字符串进行操作,一个字符串对象会被指针所引用。

      一般情况下,使用一个旧的字符串对象对一个新声明的字符串对象进行赋值,其实就是新的指针指向同一个字符串对象,也就是指针的拷贝,并没有生成新的字符串。只有对一个可变字符串对象进行拷贝,或者对任意字符串对象进行可变拷贝时才会生成一个新对象。

      同样的在函数、方法传值时,也是指针的传递,操作的都是同一份对象。

    2. 可变与不可变字符串

      NSString类型的对象是不可变字符串,NSString一旦被实例化,就不能再改变内容和长度。

      NSMutableString类型的对象是可变字符串,它可以进行拼接、移除、插入等操作。

    3. 常用字符串操作

    • 新建字符串
    // 创建一个空字符串
    NSString *str1 = [NSString string];
    NSString *str2 = @"";
        
    // 创建一个非空串
    NSString *str3 = @"我是一个字符串";
    
    • 是否空串
    NSString *name = @"";
    if (name.length == 0) {
        NSLog(@"名字是个空字符串");
    } else {
        NSLog(@"名字不是个空字符串");
    }
    
    • 长度
    name = @"Alean";
    NSInteger nameLength = name.length;
    NSLog(@"姓名长度:%zd个字符", nameLength);
    
    • 是否相同
    NSString *name2 = @"Alean";
    if ([name isEqualToString:name2]) {
        NSLog(@"姓名相同");
    } else {
        NSLog(@"姓名不同");
    }
    
    • 大小写转换
    NSString *upperName = name.uppercaseString;
    NSString *lowerName = name.lowercaseString;
    NSLog(@"姓名大写:%@ \n姓名小写:%@", upperName, lowerName);
    
    • 开头
    NSString *prefix = @"Ale";
    if ([name hasPrefix:prefix]) {
        NSLog(@"%@是以%@开头的", name, prefix);
    } else {
        NSLog(@"%@不是以%@开头的", name, prefix);
    }
    
    • 结尾
    NSString *suffix = @"na";
    if ([name hasSuffix:suffix]) {
        NSLog(@"%@是以%@结尾的", name, suffix);
    } else {
        NSLog(@"%@不是以%@结尾的", name, suffix);
    }
    
    • 从头截取子串
    NSInteger indexTo = 2;
    NSString *subNameTo = [name substringToIndex:indexTo];
    NSLog(@"%@从开头截取%@个字符的子串%@", name, @(indexTo), subNameTo);
    
    • 从指定位置截取子串
    NSInteger indexFrom = 3;
    NSString *subNameFrom = [name substringFromIndex:indexFrom];
    NSLog(@"%@从第%@个字符到结束的子串%@", name, @(indexFrom), subNameFrom);
    
    • 指定区间子串
    NSRange range = NSMakeRange(1, 2);
    NSString *subNameRange = [name substringWithRange:range];
    NSLog(@"%@从第%zd个字符截取长度为%zd的子串为%@", name, range.location, range.length, subNameRange);
    
    • 拼接
    NSString *all = [name stringByAppendingString:name2];
    NSLog(@"%@拼接%@的结果是:%@", name, name2, all);
    

    二、swift中的字符串

    1. 引用类型

      Swift中,String类型对象一个实际的值,使用旧的String对象对新定义的String赋值,实际创建了一个相等的新值。

      同样,函数传参时,也是传递的实际值,并且创建了一个新的字符串,函数内的操作不会改变原有的String对象。

    2. 可变与不可变字符串

      Swift中可变字符串使用var修饰,let用来修饰不可变字符串。

    3. 常用字符串操作

    • 创建一个空字符串
    let emptyStr1 = ""
    let emptyStr2 = String()
    
    • 创建字符串常量
    let nameConst = "Jack"
    
    • 创建字符串变量
    var nameVariable = "xiaoming"
    nameVariable = "xiaogang"
    
    • 是否空串
    var name = ""
    if name.isEmpty {
        print("名字是个空字符串")
    } else {
        print("名字叫:\(name)")
    }
    

    // 长度
    name = “Alean”
    let nameLength = name.characters.count
    print(“姓名长度:(nameLength)个字符”)

    • 是否相同
    let name2 = "Alean"
    if name == name2 {
        print("姓名相同")
    } else {
        print("姓名不同")
    }
    
    • 大小写转换
    let upperName = name.uppercased()
    let lowerName = name.lowercased()
    print("姓名大写:\(upperName) \n姓名小写:\(lowerName)")
    
    • 开头
    let prefix = "Ale"
    if name.hasPrefix(prefix) {
        print("\(name)是以\(prefix)开头的")
    } else {
        print("\(name)不是以\(prefix)开头的")
    }
    
    • 结尾
    let suffix = "na"
    if name.hasSuffix(suffix) {
        print("\(name)是以\(suffix)结尾的")
    } else {
        print("\(name)不是以\(suffix)结尾的")
    }
    
    • 从头截取子串
    let indexTo = 2
    let subIndexTo = name.index(name.startIndex, offsetBy: indexTo)
    let subNameTo = name.substring(to: subIndexTo)
    print("\(name)从开头截取\(indexTo)个字符的子串\(subNameTo)")
    
    • 从指定位置截取子串
    let indexFrom = -2
    let fromIndexFrom = name.characters.count + indexFrom
    let subIndexFrom = name.index(name.endIndex, offsetBy: indexFrom)
    let subNameFrom = name.substring(from: subIndexFrom)
    print("\(name)从第\(fromIndexFrom)个字符到结束的子串\(subNameFrom)")
    
    • 指定区间子串
    let subFormIndex = 1
    let subLength = 2
    let rangeStartIndex = name.index(name.startIndex, offsetBy: subFormIndex)
    let rangeLengthIndex = name.index(name.startIndex, offsetBy: subFormIndex + subLength)
    let range = Range(uncheckedBounds: (lower: rangeStartIndex, upper: rangeLengthIndex))
    let subNameRange = name.substring(with: range)
    print("\(name)从第\(subFormIndex)个字符截取长度为\(subLength)的子串为\(subNameRange)")
    
    • 拼接
    let all = name + name2
    print("\(name)拼接\(name2)的结果是:\(all)")
    
    展开全文
  • iOS开发-OC中特殊字符串编码解码 iosURL字符串的URLencode 和 encodeURIComponent(base64) 去除get时因特殊字符至错 CFURLCreateStringByAddingPercentEscapes iOS URLencode和decode注意 iOS开发之请求设置自定义...
    • 在iOS开发中有时候需要对特殊字符或汉字进行处理,尤其是在发送get请求时(post请求可以不处理),是不能传中文的,如果请求参数有=&肯定也是不行的,这时候就需要进行encode转码。

    Foundation框架对特殊字符编码解码

    • encode编码方法:
      1. iOS9之前使用- (nullable NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc,iOS9之后过期,但依然可以使用。
      2. iOS9之后使用- (nullable NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters,该方法在iOS7及以后才有效。
    • decode方法:
      1. iOS9之前使用- (nullable NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)enc API_DEPRECATED,iOS9之后过期.
      2. iOS9之后使用@property (nullable, readonly, copy) NSString *stringByRemovingPercentEncoding,该方法在iOS7及以后才有效。
    • 示例:
        NSString * str = @"?!@#$^&%*+,:;='\”`<>()[]{}/\|中国 ";
        //iOS9后过期
        NSString * encodestr1 = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        //支持iOS7及以后
        NSString * encodestr2 = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        //自己定义要转义的字符
        NSString * encodestr3 = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"?!@#$^&%*+,:;='\”`<>()[]{}/\|"].invertedSet];
     //解码
        NSString * decodestr1 = [encodestr1 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString * decodestr2 = [encodestr2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString * decodestr3 = [encodestr3 stringByRemovingPercentEncoding];
    

    打印结果
    Foundation框架中对特殊字符编码解码示例结果

    • 可见我们完全可以自己定义要转义的字符,这里需要说明的是NSCharacterSet其他类属性的所代表的特殊字符串:
      URLFragmentAllowedCharacterSet  @"#%<>[\]^`{|}"
      URLHostAllowedCharacterSet      @"#%/<>?@\^`{|}"
      URLPasswordAllowedCharacterSet  @"#%/:<>?@[\]^`{|}"
      URLPathAllowedCharacterSet      @"#%;<>?[\]^`{|}"
      URLQueryAllowedCharacterSet     @"#%<>[\]^`{|}"
      URLUserAllowedCharacterSet      @"#%/:<>?@[\]^`"
    

    附加swift编码解码:

     //去除中文及特殊字符
     let str1 = "123中国¥&=美国"
     //编码
     let encodeStr = str1.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
          print(encodeStr)
     //解码
     let decodeStr = encodeStr?.removingPercentEncoding;
    

    CoreFoundation框架对特殊字符编码解码,C语言

    • encode编码:
    //避免出现重复编码出错问题(建议使用)
    -(NSString *)URLEncodedString:(NSString *)str
    {
        NSString *encodedString = (NSString *)
        CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                  (CFStringRef)str,
                                                                  NULL,
                                                                  (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                  kCFStringEncodingUTF8));
        return encodedString;
    }
    
    • decode解码
    -(NSString *)URLDecodedString:(NSString *)str
    {
        NSString *decodedString=(__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)str, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
        return decodedString;
    }
    
    • 示例:
    //编码
    NSString * encodestr4 = [self URLEncodedString:str];
    //解码
    NSString * decodestr4 = [self URLDecodedString:encodestr4];
    NSString * decodestr5 = [self URLDecodedString:encodestr1];
    NSString * decodestr6 = [self URLDecodedString:encodestr2];
    NSString * decodestr7 = [self URLDecodedString:encodestr3]
    

    打印结果:
     CoreFoundation框架对特殊字符编码解码示例结果

    展开全文
  • Swift-字符串和字符

    2019-07-29 09:25:53
    1. 字符串Swift 中 String 类型是值类型。 如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 在前述任一情况下,都会对已有字符串值创建新副本,并对该新...

    1. 字符串

    • 在 Swift 中 String 类型是值类型。
    • 如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。
    • 在前述任一情况下,都会对已有字符串值创建新副本,并对该新副本而非原始字符串进行传递或赋值操作

    1.1 初始化空字符串

    // 两个字符串均为空并等价。
    var emptyString = ""	//	空字符串字面量
    var anotherEmptyString = String()	//	初始化方法
    
    • 你可以通过检查 Bool 类型的 isEmpty 属性来判断该字符串是否为空:
    if emptyString.isEmpty {
        print("Nothing to see here")
    }	//	打印输出:“Nothing to see here”
    

    1.2 字符串可变性

    var variableString = "Horse"
    variableString += " and carriage"	// variableString 现在为 "Horse and carriage"
    
    let constantString = "Highlander"
    constantString += " and another Highlander"	// 这会报告一个编译错误(compile-time error) - 常量字符串不可以被修改。
    

    1.3 连接字符串和字符

    • 字符串可以通过加法运算符(+)相加在一起(或称“连接”)创建一个新的字符串。
    • 可以通过加法赋值运算符(+=)将一个字符串添加到一个已经存在字符串变量上。
    • 可以用 append() 方法将一个字符附加到一个字符串变量的尾部。
    let string1 = "hello"
    let string2 = " there"
    var welcome = string1 + string2	//	welcome 现在等于 "hello there"
    
    var instruction = "look over"
    instruction += string2	// instruction 现在等于 "look over there"
    
    let exclamationMark: Character = "!"
    welcome.append(exclamationMark)	//	welcome 现在等于 "hello there!"
    

    1.4 字符串插值

    let multiplier = 3
    let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"	//	"3 times 2.5 is 7.5"
    

    1.5 计算字符数量

    let unusualMenagerie = "Koala ?, Snail ?, Penguin ?, Dromedary ?"
    print("unusualMenagerie has \(unusualMenagerie.count) characters")
    // 打印输出“unusualMenagerie has 40 characters”
    

    1.6 访问和修改字符串

    1.6.1 字符串索引

    • 每一个 String 值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个 Character 的位置。
    • 使用 startIndex 属性可以获取一个 String 的第一个 Character 的索引。
    • 使用 endIndex 属性可以获取最后一个 Character 的后一个位置的索引。
    • 如果 String 是空串,startIndex 和 endIndex 是相等的。
    let greeting = "Guten Tag!"
    greeting[greeting.startIndex]
    // G
    greeting[greeting.index(before: greeting.endIndex)]
    // !
    greeting[greeting.index(after: greeting.startIndex)]
    // u
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    greeting[index]
    // a
    

    通过调用 String 的 index(before:) 或 index(after:) 方法,可以立即得到前面或后面的一个索引。
    你还可以通过调用 index(_:offsetBy:) 方法来获取对应偏移量的索引,这种方式可以避免多次调用 index(before:) 或 index(after:) 方法。

    • 使用 indices 属性会创建一个包含全部索引的范围(Range),用来在一个字符串中访问单个字符。
    for index in greeting.indices {
       print("\(greeting[index]) ", terminator:" ")
    }	//	打印输出“G u t e n   T a g ! ”
    

    注意:
    你可以使用 startIndex 和 endIndex 属性或者 index(before:) 、index(after:) 和 index(_:offsetBy:) 方法在任意一个确认的并遵循 Collection 协议的类型里面,如上文所示是使用在 String 中,你也可以使用在 Array、Dictionary 和 Set 中。

    1.6.2 插入和删除

    • 调用 insert(_:at:) 方法可以在一个字符串的指定索引插入一个字符。
    • 调用 insert(contentsOf:at:) 方法可以在一个字符串的指定索引插入一个段字符串。
    var welcome = "hello"
    welcome.insert("!", at: welcome.endIndex)	// welcome 变量现在等于 "hello!"
    
    welcome.insert(contentsOf:" there", at: welcome.index(before: welcome.endIndex))	// welcome 变量现在等于 "hello there!"
    
    • 调用 remove(at:) 方法可以在一个字符串的指定索引删除一个字符。
    • 调用 removeSubrange(_? 方法可以在一个字符串的指定索引删除一个子字符串。
    welcome.remove(at: welcome.index(before: welcome.endIndex))	// welcome 现在等于 "hello there"
    
    let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
    welcome.removeSubrange(range)	// welcome 现在等于 "hello"
    

    注意:
    你可以使用 insert(:at:)、insert(contentsOf:at:)、remove(at:) 和 removeSubrange(? 方法在任意一个确认的并遵循 RangeReplaceableCollection 协议的类型里面,如上文所示是使用在 String 中,你也可以使用在 Array、Dictionary 和 Set 中。

    1.7 子字符串

    • 当你从字符串中获取一个子字符串,可以使用下标或者 prefix(_? 之类的方法,就可以得到一个 SubString 的实例,而非另外一个 String。
    • Swift 里的 SubString 绝大部分函数都跟 String 一样,意味着你可以使用同样的方式去操作 SubString 和 String。
    • 跟 String 不同的是,你只有在短时间内需要操作字符串时,才会使用 SubString。
    • 当你需要长时间保存结果时,就把 SubString 转化为 String 的实例。(因为它重用了原 String 的内存空间,原 String 的内存空间必须保留直到它的 SubString 不再被使用为止。)
    let greeting = "Hello, world!"
    let index = greeting.firstIndex(of: ",") ?? greeting.endIndex
    let beginning = greeting[..<index]
    // beginning 的值为 "Hello"
    
    // 把结果转化为 String 以便长期存储。
    let newString = String(beginning)
    
    String 和 SubString 的区别在于:
    	性能优化上,SubString 可以重用原 String 的内存空间,或者另一个 SubString 的内存空间(String 也有同样的优化,但如果两个 String 共享内存的话,它们就会相等)。这一优化意味着你在修改 String 和 SubString 之前都不需要消耗性能去复制内存。就像前面说的那样,SubString 不适合长期存储 —— 因为它重用了原 String 的内存空间,原 String 的内存空间必须保留直到它的 SubString 不再被使用为止。
    

    1.8 字符串比较

    Swift 提供了三种方式来比较文本值:

    • 字符串字符相等
    • 前缀相等
    • 后缀相等

    1.8.1 字符串/字符相等

    • 使用等于操作符(==)和不等于操作符(!=)
    let quotation = "We're a lot alike, you and I."
    let sameQuotation = "We're a lot alike, you and I."
    if quotation == sameQuotation {
        print("These two strings are considered equal")	// 打印输出“These two strings are considered equal”
    }
    

    1.8.2 前缀相等

    调用字符串的 hasPrefix(_? 方法来检查字符串是否拥有特定前缀,方法接收一个 String 类型的参数,并返回一个布尔值。

    let romeoAndJuliet = [
        "Act 1 Scene 1: Verona, A public place",
        "Act 1 Scene 2: Capulet's mansion",
        "Act 1 Scene 3: A room in Capulet's mansion",
        "Act 1 Scene 4: A street outside Capulet's mansion",
        "Act 1 Scene 5: The Great Hall in Capulet's mansion",
        "Act 2 Scene 1: Outside Capulet's mansion",
        "Act 2 Scene 2: Capulet's orchard",
        "Act 2 Scene 3: Outside Friar Lawrence's cell",
        "Act 2 Scene 4: A street in Verona",
        "Act 2 Scene 5: Capulet's mansion",
        "Act 2 Scene 6: Friar Lawrence's cell"
    ]
    
    var act1SceneCount = 0
    for scene in romeoAndJuliet {
        if scene.hasPrefix("Act 1 ") {
            act1SceneCount += 1
        }
    }
    print("There are \(act1SceneCount) scenes in Act 1")	//	// 打印输出“There are 5 scenes in Act 1”
    

    1.8.3 后缀相等

    调用字符串的 hasSuffix(_? 方法来检查字符串是否拥有特定后缀,方法接收一个 String 类型的参数,并返回一个布尔值。

    let romeoAndJuliet = [
        "Act 1 Scene 1: Verona, A public place",
        "Act 1 Scene 2: Capulet's mansion",
        "Act 1 Scene 3: A room in Capulet's mansion",
        "Act 1 Scene 4: A street outside Capulet's mansion",
        "Act 1 Scene 5: The Great Hall in Capulet's mansion",
        "Act 2 Scene 1: Outside Capulet's mansion",
        "Act 2 Scene 2: Capulet's orchard",
        "Act 2 Scene 3: Outside Friar Lawrence's cell",
        "Act 2 Scene 4: A street in Verona",
        "Act 2 Scene 5: Capulet's mansion",
        "Act 2 Scene 6: Friar Lawrence's cell"
    ]
    
    var mansionCount = 0
    var cellCount = 0
    for scene in romeoAndJuliet {
        if scene.hasSuffix("Capulet's mansion") {
            mansionCount += 1
        } else if scene.hasSuffix("Friar Lawrence's cell") {
            cellCount += 1
        }
    }
    print("\(mansionCount) mansion scenes; \(cellCount) cell scenes")	// 打印输出“6 mansion scenes; 2 cell scenes”
    

    2. 字符

    • 可通过 for-in 循环来遍历字符串,获取字符串中每一个字符的值:
    for character in "Dog!" {
        print(character)
    }
    // D
    // o
    // g
    // !
    
    • 通过标明一个 Character 类型并用字符字面量进行赋值,可以建立一个独立的字符常量或变量:
    let exclamationMark: Character = "!"
    
    • 字符串可以通过传递一个值类型为 Character 的数组作为自变量来初始化:
    let catCharacters: [Character] = ["C", "a", "t", "!"]
    let catString = String(catCharacters)
    print(catString)	//	打印输出:“Cat!”
    

    3. 字符串的 Unicode 表示形式

    当一个 Unicode 字符串被写进文本文件或者其他储存时,字符串中的 Unicode 标量会用 Unicode 定义的几种 编码格式(encoding forms) 编码。每一个字符串中的小块编码都被称 代码单元(code units)

    • UTF-8 编码格式:编码字符串为 8 位的代码单元。
    • UTF-16 编码格式:编码字符串位 16 位的代码单元。
    • UTF-32 编码格式:编码字符串32位的代码单元。
    展开全文
  • [swift]4.0原生字符串

    2017-03-05 15:40:42
    swift】4.0原生字符串
  • swift3.0 关于字符串

    2016-10-10 17:47:46
    //: Playground - noun: a place where people can playimport UIKit//字符串字面量 func zfczml(){/* 什么是字符串 String是例如“hello, world”,“海贼王” 这样的有序的Character(字符)类型的值的集合,...
  • [Swift]生成随机字符串

    2016-10-26 11:00:42
    这里记录一个生成随机字符串的方法,因为用到了MD5编码,需要在桥接文件里引入头文件: #import 然后,实现下面的方法即可: static func randomMD5() -> String { let identifier = CFUUIDCreate(nil) let ...
  • Swift-字符和字符串

    2016-07-30 22:43:12
    对比 OC 与 Swift字符的区别 char charValue = 'a';//OC当中的字符:var charValue1:Character = "a" //swift当中的字符: Swift和OC字符不一样 1.Swift是用双引号 2.Swift中的字符类型和OC中的也不一样 OC中的...
  • 这里讲解的是json字符串解析.寻常解析用三方库即可.但是有时,解析出来的数据并不是你想要的. 例如返回的数据为一个数组,但是却用json字符串包装的.那么你用原生的或三方库解析出来的数据为一个字符串类型:
  • Swift3.0语言教程获取字符串编码与哈希地址
  • [Swift]遍历字符串

    2019-07-30 09:37:25
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:...
  • Swift 4 中的字符串

    2018-08-15 10:30:03
    原文地址 英文版链接 这个系列中其他文章: 1. Swift 1 中的字符串 2. Swift 3 中的字符串 ...所有的现代编程语言都有对 Unicode 编码字符串的支持,但这通常只意味着它们的原生字符串类型可以存储 Unicode...
  • 学习一门新语言怎么能少的了字符串呢。...本篇博客的主题就是Swift中的字符串类型String,String在Swift中让人省心了不少。今天这篇博客就好好的认识一下Swift中的String。  一、字符串拷贝  在Swift
  • 字符串字面量可以包含以下特殊字符: • 转义字符 \0 (空字符)、 \\ (反斜线)、 \t (水平制表符)、 \n (换行符)、 \r (回车符)、 \" (双引号)、 \' (单引号)。
  • swift字符串和字符

    2018-12-18 10:16:20
    2.3、字符串和字符(Strings and Characters) 本页包含内容: 字符串字面量 初始化空字符串 字符串可变性 字符串是值类型 使用字符 连接字符串和字符 字符串插值 Unicode 计算字符数量 访问和修改字符串 比较字符...
  • //// ViewController.swift// 010-字符串//// Created by 庄壮勇 on 2018/1/3.// Copyright © 2018年 Personal. All rights reserved.//import UIKitclass ViewController: UIViewController { override func ...
1 2 3 4 5 ... 20
收藏数 5,097
精华内容 2,038
热门标签
关键字:

4的字符串编码 swift