美文网首页
06Swift基本语法(字符串,数组,字典)

06Swift基本语法(字符串,数组,字典)

作者: i爱吃土豆的猫 | 来源:发表于2016-08-03 01:37 被阅读23次

1. 字符串

  • String 是一个结构体,性能更高,NSString 是一个 OC 对象,性能略差
  • String目前具有了绝大多数NSString的功能
  • String 支持直接遍历
  • Swift 提供了 String和 NSString之间的无缝转换
1.1 遍历字符串中的字符
for s in str.characters { 
     print(s)
}
1.2 字符串长度
// 返回以字节为单位的字符串长度,一个中文占 3 个字节
let len1 = str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
// 返回实际字符的个数let len2 = str.characters.count
// 返回 utf8 编码长度
let len3 = str.utf8.count
1.3 字符串拼接

直接在 "" 中使用 \ (变量名)的方式可以快速拼接字符串

let str1 = "Hello"
let str2 = "World"
let i = 32
str = "\(i) 个 " + str1 + " " + str2
1.4 格式化字符串

在实际开发中,如果需要指定字符串格式,可以使用String(format:...)的方式

func demo4() { 
    let h = 8 
    let m = 5 
    let s = 6 

    print("\(h):\(m):\(s)") 

    // 如果需要使用格式字符串的时候,可以单独使用 String(format: xxx) 
    let dateString = String(format: "%02d:%02d:%02d", arguments: [h, m, s]) 
    print(dateString) 

    // 可以直接在格式字符串后面添加 参数,用 逗号分隔 
    let dateString2 = String(format: "%02d:%02d:%02d", h, m, s) 
    print(dateString2) 
}
1.5 可选项的拼接
  • 如果变量是可选项,拼接的结果中会有 Optional

  • 为了应对强行解包存在的风险,苹果提供了 ?? 操作符

  • ?? 操作符用于检测可选项是否为 nil

    let str1 = "Hello"
    let str2 = "World"
    let i: Int? = 32
    str = "\(i ?? 0) 个 " + str1 + " " + str2
    
1.6 Swift的截取
  // 字符串的子串,提示:在 Swift 中 String 取子串不是特别好写,建议使用 NSString 
  func demo5() {
       let str = "hello world" 
       
       let s1 = (str as NSString).substringWithRange(NSMakeRange(2, 5)) 
       print(s1)
  }

2. 数组

2.1 数组的定义
  • 数组使用 [] 定义,这一点与 OC 相同

  • 数字不需要包装成NSNumber

  • 结构体需要包装成NSValue

  • 数组存放相同类型的情况多, 数组是通过下标来遍历的

    func demo1(){ 
          let arr = ["zhangsan", "lisi", 18, NSValue(CGPoint: CGPointMake(100, 100))] 
          print(arr); 
    }
    
2.2 遍历
for num in numbers { 
    print(num)
}
2.3 通过下标获取指定项内容
let num1 = numbers[0]
let num2 = numbers[1]
2.4 可变&不可变数组
  • let 定义不可变数组

  • var 定义可变数组

    let array = ["zhangsan", "lisi"]
    //: 不能向不可变数组中追加内容
    //array.append("wangwu")
    var array1 = ["zhangsan", "lisi"]
    
    //: 向可变数组中追加内容      
    array1.append("wangwu")
    
2.5 数组的类型
  • 如果初始化时,所有内容类型一致,则数组中保存的是该类型的内容

  • 如果初始化时,所有内容类型不一致,则数组中保存的是 NSObject

    //: array1 仅允许追加 String 类型的值
    //array1.append(18)
    
    var array2 = ["zhangsan", 18]
    //: 在 Swift 中,数字可以直接添加到集合,不需要再转换成 `NSNumber`
    array2.append(100)
    //: 在 Swift 中,如果将结构体对象添加到集合,仍然需要转换成 `NSValue`
    
    array2.append(NSValue(CGPoint: CGPoint(x: 10, y: 10)))
    

    func demo2(){
    // 这个时候编译器会自动推导出我们的arr是一个string类型的数组
    var arr:[AnyObject] = ["zhangsan", "lisi"];
    arr.append("123")
    print(arr);
    /* ERR: 因为我们的数组是string类型 , 我们追加123是Int类型的, 类型不匹配 var arr:[AnyObject] = ["zhangsan", "lisi"] 这样就可以追加了
    arr.append(123)
    print(arr)
    */
    }

2.6 数组的定义和实例化
  • 使用 : 可以只定义数组的类型

  • 实例化之前不允许添加值

  • 使用 类型可以实例化一个空的数组

    var array3: [String]
    //: 实例化之前不允许添加值
    //array3.append("laowang")
    //: 实例化一个空的数组
    array3 = [String]()
    array3.append("laowang")
    
2.7 数组的合并
  • 必须是相同类型的数组才能够合并
  • 开发中,通常数组中保存的对象类型都是一样的!
/// 数组的合并 
    func demo10() { 
        var array: [NSObject] = ["张三", "lisi"] 
        let array2: [NSObject] = ["网舞", "赵丽"] 

        let array3 = ["小李", 18] 

        // 目标 array2 合并到 array 中 
        array += array2 

        // 注意:在合并数组的时候,数组的类型必须保持一致 
        array += array3 
            print(array) 
}
2.8 数组的操作

// 数组的基本操作 - 增/删/改

func demo4() { 
    var array = ["zhangsan", "lisi"] 

// 增加

array.append("wangwu") 
print(array) 

// 修改 - 通过下标获取元素,然后进行修改

array[0] = "zhaoliu" 
print(array) 

// 删除 - 删除第一个

array.removeFirst() 
print(array) 

// 删除最后一个

array.removeLast() 
print(array) 

// 删除所有元素,并且保留容量

array.removeAll(keepCapacity: true) 
print(array) 
print("数组容量 \(array.capacity)") 
}
2.9 内存分配
  • 如果向数组中追加元素,超过了容量,会直接在现有容量基础上 * 2

    // 测试数组容量 
    func demo5() { 
          // 定义一个存放字符串的数组,并没有分配控件 
          var array: [String] 
    
          // 分配空间 array = [String]() 
    
          for i in 0..<16 { 
                array.append("张三 \(i)") 
    
                // 当插入元素时,如果容量不够,会在当前容量基础上 * 2,方便后续的元素的增加 
                print(array[i] + " - 容量 \(array.capacity)") 
                }
           print(array) 
      }
    

3. 字典

3.1 定义
  • 同样使用 [] 定义字典
  • let 不可变字典, var 可变字典
  • [String : NSObject] 是最常用的字典类型
// [String(key) : NSObject(value)]
let dict = ["name": "小花", "age": 18]

print(dict)
3.2 字典赋值
  • 赋值直接使用 dict[key] = value 格式

  • 如果 key 不存在,会设置新值

  • 如果 key 存在,会覆盖现有值

    //: * 如果 key 不存在,会设置新值
    dict["title"] = "boss"
    //: * 如果 key 存在,会覆盖现有值
    dict["name"] = "lisi"
    
3.3 字典的遍历
  • k,v 可以随便写
  • 前面的是 key, 后面的是 value
func demo8() { 
     /** 
        let 是不可变 
        var 是可变 
     */ 
     var dict = ["name": "小花", "age": 18] 

     // 如果 key 存在,值覆盖 
     dict["name"] = "小草" 

     // 如果 key 不存在,新增 
     dict["title"] = "老大" 
              print(dict) 
     // 遍历 
     /** k, v 是随便写的 

              前面的是 key 
              后面的是 value 
     */ for (key, value) in dict { 
              print("KEY \(key) --- VALUES \(value)") 
     }
}
3.4 字典的合并

如果 key 不存在,会建立新值,否则会覆盖现有值

//: 合并字典
var dict1 = [String: NSObject]()
    dict1["nickname"] = "大老虎"
    dict1["age"] = 100

//: 如果 key 不存在,会建立新值,否则会覆盖现有值
for (k, v) in dict1 { 
    dict[k] = v
}
print(dict)

文/greedyDoor(简书作者)原文链接:http://www.jianshu.com/p/29eac03aa695著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

相关文章

网友评论

      本文标题:06Swift基本语法(字符串,数组,字典)

      本文链接:https://www.haomeiwen.com/subject/zgqqsttx.html