zoukankan      html  css  js  c++  java
  • swift 初见-4运算符与字符串操作

    // Playground - noun: a place where people can play
    
    import UIKit
    //import Foundation
    
    var str = "Hello, playground"
    //swift 新运算符 Nil Coalescing Operator  (nil聚合运算符)  二元运算符  它是为可选型数据来设计的,通常用在解包的过程中
    // 示例:  a??b ---> a!=nil? a! : b (a不为空就解包,否则返回默认值b)  a必须是optional类型 ,b类型必须和a解包后的类型是一致的
    // 实例:
    var name:String?
    name="andy"
    
    // 需要注意的时 name != nil 中!=与前后都有个空格否则会报错的,假如没有空格 name!变成了解包 
    // 无空格时:error: type '()' does not conform to protocol 'BooleanType'
    if name != nil{
        println("hello,(name)")
        // 这里加!号,前面讲过的
        println("hello"+String(name!))
    }else
    {
        println("hello,kim")
    }
    
    // 简化if代码-1:
    // 开发技巧:在元素前后分别留出一个空格间隔前后代码或符号
    let myName:String=name != nil ? name! : "kim"
    println("hello"+myName)
    
    // 简化if代码-2
    let myNames:String=name ?? "kim"
    println("hello"+String(myNames)) //这样就保证了myNames始终是个有意义的值
    
    
    // 区间运算符 Range Operator 常用forin循环连用
    
    // 闭区间 [a,b] ---->a...b  //三点
    // 前闭后开 [a,b)---->a..<b //两点
    
    for indexs in 1...10
    {
        indexs
     // indexs=10   error:error: cannot assign to 'let' value 'indexs' ,默认常量
    }
    
    for indexs in 1..<10
    {
        indexs
        // indexs=10   error:error: cannot assign to 'let' value 'indexs' ,默认常量
    }
    
    //Logical Operator
    // !a a&&b  a||b     注意 a & b , a | b这是位运算,不是逻辑运算
    
    // String Mutability 
    // var 声明的都是可变字符串 ,let 为不可变
    // 遍历字符串
    for c in str
    {
        println(c) //c为Character型
    }
    
    // Character 类型
    var ch:Character="!"  //写个字符会报错
    str.append(ch)
    
    println(str)
     // str +=ch  //这样是不能的,类型不匹配 ,两个字符串可以
    countElements(str)  //计算长度,可以智能的把中文当做一个字符(底层语言中中文为unico符处理起来麻烦)
    var str1:NSString=str
    str1.length
    var str2="hellou{1F496}"
    countElements(str2) //长度为6
    var str3:NSString="hellou{1F496}"
    str3.length   // 长度为7,在这里可以发现swift处理字符串时比OC更具优势
    
    let SFInt:Int = 2
    let SFDouble:Double = 2;
    let SFBool:Bool=true;
    let SFTuple:(Int,Int) = (2,3) //元组
    let SFOptional:Int?=nil
    let SFCharaceter:Character = "!"
    
    println("Bool:(SFBool) 
     Tuple:(SFTuple)") // 
     换行
    
    //String Comparing
    let stringA="abc"
    let stringB="abc"
    stringA==stringB
    let stringC="abd"
    let stringD="d"
    stringA<stringC
    stringA<stringD
    
    let array=["abc","abc","abc","abc"]
    for strs in array
    {   // strs.hasSuffix("c")
        if(strs.hasPrefix("a"))
        {
         println("String=(strs)")
        }
    }
    
    
    // 导入OC中得框架可以使用原来OC中得其他方法 
      stringA.capitalizedString
      stringA
      stringA.uppercaseString
      stringA.lowercaseString
      stringA
      
    // trim 操作  //对字符串的头尾进行截取,对中间是没有作用的
    var stringE=" a    b   b   c       "
    stringE.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())  //该方法来自OC
    stringE
    stringE.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:"a")) // 不是从头开始的,无法截取
    stringE.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:" a")) //注意是两个字符, a前面有个空格
    // split
    stringE.componentsSeparatedByString(" ")
    
    stringE.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString:"b"))
    
    //join
    var stringF="-"
    stringF.join(["1","2","3"])
    
    // range
    stringE.rangeOfString("b")  //返回的是可选型 ,返回第一个的位置
    // 最新的swift语法  可能  rangeOfString返回的是元组(22,4),不再是23..<27的range ,这是网友提供的并没有经过验证!!!!!!!!!!!
    // 反向收索
    stringE.rangeOfString("b", options: NSStringCompareOptions.BackwardsSearch)
    
    // 忽略大小写
    stringE.rangeOfString("b", options: NSStringCompareOptions.CaseInsensitiveSearch)
    
    // String类型有个 String.Index索引
    stringE.startIndex
    stringE.endIndex
    
    // < >为swift中泛型的概念
    let stringRange = Range<String.Index>(start:stringE.startIndex,end:stringE.endIndex)
    
    let startIndex=str.startIndex  // 注意它的0并不是整型0,而是String.Index类型
    // 整型10 表示向后走10步
    let endIndex:String.Index=advance(stringE.startIndex, 10)
    let seachIndex=Range<String.Index>(start: startIndex, end: endIndex)
    
    // 固定范围内搜索
    stringE.rangeOfString("b", options:NSStringCompareOptions.CaseInsensitiveSearch, range: seachIndex)
    
    // subString
    var toIndex=advance(startIndex, 10)
    stringE.substringToIndex(toIndex)
    var fromIndex=advance(startIndex,13)
    stringE.substringFromIndex(fromIndex)
    // 返回的是从10 - 13 不包括第13个字符
    stringE.substringWithRange(Range<String.Index>(start: toIndex, end: fromIndex))
    
    //insert
    var insertIndex=advance(stringE.startIndex,5)
    stringE.substringFromIndex(fromIndex)
    //stringE.insert("!", atIndex: insertIndex)
    // stringE.removeAtIndex(insertIndex)
    // stringE.replaceRange(<#subRange: Range<String.Index>#>, with: <#C#>)
    // stringE.removeRange(<#subRange: Range<String.Index>#>)
  • 相关阅读:
    测试用例设计--边界值
    测试用例设计--等价类划分
    实战JAVA虚拟机 JVM故障诊断与性能优化(八)
    Centos-Mysql远程访问
    实战JAVA虚拟机 JVM故障诊断与性能优化(七)
    实战JAVA虚拟机 JVM故障诊断与性能优化(六)--->JConsole And Visual VM
    实战JAVA虚拟机 JVM故障诊断与性能优化(六)
    jdk 1.8 VisualVM 插件 地址 变更
    实战JAVA虚拟机 JVM故障诊断与性能优化(七)--->无处不在的字符串:String在虚拟机中的实现
    本地git项目,push到github上
  • 原文地址:https://www.cnblogs.com/lovelifeloveme/p/4065072.html
Copyright © 2011-2022 走看看