美文网首页Swift程序员iOS技术交流收藏
二.初识Swift.让我们的程序飞起来~(字符串,数组,字典)

二.初识Swift.让我们的程序飞起来~(字符串,数组,字典)

作者: 阿拉斯加的狗 | 来源:发表于2015-12-04 00:55 被阅读112次

接着上一篇

一.初识Swift.让我们的程序飞起来(基础语法)大家是不是对swift有了那么一点点的了解了呢(当然我自己的也在摸索中进度还是有点晕晕哒...ps:大牛看到请绕道)

  • 这里我还会跟着上一篇没有说完的语法继续更新,由于上一篇篇幅过长,防止给位看官看到就直接右上角的冲动,所以再次从新更新一章紧追学习 继续ing~
  • 这里跟大家补充一个小的知识点:可选项替换 操作符"??"
##    `??` 运算符

  * `??` 运算符可以用于判断 `变量/常量` 的数值是否是 `nil`,如果是则使    用后面的值替代
  * 在使用 Swift 开发时,`??` 能够简化代码的编写

  swift
  let num: Int? = nil

  let r1 = (num ?? 0) + 10
  print(r1)

     import UIKit

        class ViewController: UIViewController {

           override func viewDidLoad() {
                super.viewDidLoad()
    
                // var 的可选项默认值是 nil
                // let 的可选项没有默认值,必须要设置初始值
                let oName: String? // = "老王"
                // 定义常量的时候,如果只指定了类型,没有设置初始值,可以有一次设置机会
                oName = "老李"
                // 再次设置会报错
        //        oName = "张xx"
    
                if oName != nil {
        print(oName! + " 好!")
                }
    
                // ?? 操作符号,可以判断之前的变量是否为 nil,如果为 nil,使用后面的替换
                print((oName ?? "") + "也好!")
    
                print("-------")
                // ?? 运算符号优先级`低`
                print(oName ?? "" + "也好!")
            }

        }   
  • 字符串
    在 Swift 中绝大多数的情况下,推荐使用 String
    类型

String 是一个结构体,性能更高String 目前具有了绝大多数 NSString 的功能
String 支持直接遍历

NSString 是一个 OC 对象,性能略差
Swift 提供了 String
和 NSString
之间的无缝转换

  import UIKit

 class ViewController: UIViewController {

/**
    字符串
        Swift 中是 String 类型
            结构体
            量级更轻
            苹果推荐使用
            支持直接遍历
        OC 是 NSString 类型
            继承自 NSObject 的对象
            NSString 不支持遍历
*/
override func viewDidLoad() {
    super.viewDidLoad()
    
    demo5()
}

// 字符串的子串,提示:在 Swift 中 String 取子串不是特别好写,建议使用 NSString
func demo5() {
    
    let str = "hello world"
    
    let s1 = (str as NSString).substringWithRange(NSMakeRange(2, 5))
    print(s1)
    
    // --- 提示 -- 以下代码仅供参考,Swift语法中,变化最频繁
    let s2 = str.substringFromIndex("1234".endIndex)
    print(s2)
    
    // 指定范围 ..<
    // advancedBy 正数,向右移动,负数向左移动
    let startIndex = str.startIndex.advancedBy(2)     // 0
    let endIndex = str.endIndex.advancedBy(-2)         // 11
    
    let range = startIndex..<endIndex
    
    let s3 = str.substringWithRange(range)
    print(s3)
}

// 格式化字符串
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)
}

// 字符串的长度
func demo3() {
    let string = "你好世界Hello"
    
    // 一个中文的 UTF 对应3个字节,返回的C语言的字符串长度
    print(string.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
    
    // 返回字符串中的字符数量 - 字符串的长度!
    print(string.characters.count)
}

// 字符串的遍历
func demo2() {
    let string = "hello world!"
    
    for c in string.characters {
        print(c)
    }
}

func demo() {
    let name: String = "张三"
    let age = 18
    
    let center = view.center
    
    // 字符串的拼接 \(变量名) 方式
    print("\(name) \(age) \(center)")
}
}

集合
数组
数组使用 []
定义,这一点与 OC 相同

//: [Int]let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

遍历

for num in numbers { print(num)}

通过下标获取指定项内容

  let num1 = numbers[0]let num2 = numbers[1]

可变&不可变let
定义不可变数组
var
定义可变数组

let array = ["zhangsan", "lisi"]//: 不能向不可变数组中追加内容//array.append("wangwu")var array1 = ["zhangsan", "lisi"]//: 向可变数组中追加内容array1.append("wangwu")

数组的类型如果初始化时,所有内容类型一致,择数组中保存的是该类型的内容
如果初始化时,所有内容类型不一致,择数组中保存的是 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)))

数组的定义和实例化使用 :
可以只定义数组的类型
实例化之前不允许添加值
使用 类型
可以实例化一个空的数组

var array3: [String]//: 实例化之前不允许添加值//array3.append("laowang")//: 实例化一个空的数组array3 = [String]()array3.append("laowang")

数组的合并必须是相同类型的数组才能够合并
开发中,通常数组中保存的对象类型都是一样的!

array3 += array1//: 必须是相同类型的数组才能够合并,以下两句代码都是不允许的//array3 += array2//array2 += array3

数组的删除

//: 删除指定位置的元素array3.removeAtIndex(3)//: 清空数组array3.removeAll()

内存分配如果向数组中追加元素,超过了容量,会直接在现有容量基础上 * 2

var list = [Int]()for i in 0...16 { list.append(i) print("添加 \(i) 容量 \(list.capacity)")}

字典
定义同样使用 []
定义字典
let
不可变字典
var
可变字典
[String : NSObject]
是最常用的字典类型

//: [String : NSObject] 是最常用的字典类型var dict = ["name": "zhangsan", "age": 18]

赋值赋值直接使用 dict[key] = value
格式
如果 key 不存在,会设置新值
如果 key 存在,会覆盖现有值

//: * 如果 key 不存在,会设置新值dict["title"] = "boss"//: * 如果 key 存在,会覆盖现有值dict["name"] = "lisi"dict

遍历k,v
可以随便写
前面的是 key

后面的是 value

//: 遍历for (k, v) in dict { print("\(k) ~~~ \(v)")}

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

//: 合并字典var dict1 = [String: NSObject]()dict1["nickname"] = "大老虎"dict1["age"] = 100//: 如果 key 不存在,会建立新值,否则会覆盖现有值for (k, v) in dict1 { dict[k] = v}print(dict)

iOS技术成长群:255032637 有愿意的小伙伴可以长期学习共勉!

相关文章

网友评论

  • 曾樑:每天坚持,好样的

本文标题:二.初识Swift.让我们的程序飞起来~(字符串,数组,字典)

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