码迷,mamicode.com
首页 > 编程语言 > 详细

Swift

时间:2016-02-28 21:26:37      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:

1.Swift项目与OC项目的区别

 - Swift的类文件是以 .swift 结尾

 - main.m 不见了,程序入口以 `@UIApplicationMain`

 - Swift中,代码都是写到 `{}` 标识的代码块里面

 - 在 Swift 中,每一行代码的末尾不用跟上 `;`

 - OC 中的 initWithXXX 换成 `类名(XXX:__)` [init(XXX:)]

 - Swift 中使用 `点 .` 的方式去调用方法

 - Swift 枚举分为 `大类型.小类型`,而且大类型可以省略

 - Swift 中,当前类的属性或者方法都可以不用 self. 开头,建议大家不要加.因为在后面闭包的使用的时候,闭包里面会使用 self

 - Selector: 两种表现形式 Selector("buttonClick") / 在要传入 Selector 的地方 直接填写 "buttonClick"

 - 在 Swift 中使用 print 作打印语句

2.常量和变量

- 使用 `let` 定义常量

- 使用 `var` 定义变量

- 在 Swift 中,有 `自动推导`,会根据等号后面的值,推断出前面变量(常量)的类型,也就是说,可以不用显式的去指定类型

- 在 Swift 中对类型检测非常严格,没有 `隐式转换`,只有类型相同的变量(常量)才能进行运算

- option + click 查看变量(常量)类型

- let 与 var 如何选择: 先使用 let 定义,如果需要更改的话,再变成 var

3.可选类型

        - fatal error: unexpectedly found nil while unwrapping an Optional value

        - 什么是可选类型: 一个变量(常量)可能有值,可能为nil,那么它就是一个可选类型

        - 可选类型的变量不能直接进行运算 ,要强制解包(使用 !) 或者判断其是否有值再计算

        - 使用 `?` 标识变量是一个可选类型的变量

        - 输出的时候如果发现 `Optional(xxx)` 字样,代表打印的变量是一个可选类型

        - `!` 用于标识可选类型的变量一定有值 [解包] (程序员向系统保证 ,a 里面一定有值,你去取a的值去计算,如果没有取到值,系统就会崩溃)

        - 我们在使用 `!` 的时候,一定要小心,要确保其修饰的变量一定有值,

        - `??` 空合并运算符,判断其前面的可选值是否真的有值,如果有,就直接返回该值,如果为nil,就使用 其后面的值进行运算

4.if语句

    - 条件语句可以不使用 `()` 圆括号括起来

        - `{}` 执行代码块的花括号不能省略

        - 在 Swift 中是没有`非0即真`概念,条件语句只能有 true/false

        let a = 10
        
        // 判断 a 是否大于5, 如果大于5,就打印一句话
        if a > 5 {
            print("a 大于 5")
        }   
        // 方式1
        // 运算符的左右空格一定要对称 (空格大法)
        if url != nil{
            let request = NSURLRequest(URL: url!)
            print(request)
            // 如果下面有很多代码,并且多次使用 url ,都需要强行解包
        }
        
        // 方式2: 使用 if let
        // if let 会判断 url 是否有值,如果没有值,什么都不错
        // 如果有值,会把 url 的值取出来赋值给 u,并且进入到 if 的执行代码块中
        if let u = url {
            let request = NSURLRequest(URL: u)
            print(request)
        }    

if let 与 guard let

    func demo6(){
//        let url = NSURL(string: "http://www.baidu.com")
//        
//        if let u = url {
//            let request = NSURLRequest(URL: u)
//            print(request)
//            // 写很多逻辑
//        }
        
        let url = NSURL(string: "http://www.qq.com")
        guard let u = url where u.host == "www.baidu.com" else {
            print("url为空或者不符合条件")
            return
        }
        let request = NSURLRequest(URL: u)
        print(request)
        
    }

5.switch

let scoreStr = ""
        switch scoreStr {
        case "":
            print("大于等于90小于等于100")
        case "":
            print("大于等于80小于90")
        case "":
            print("大于等于60小于80")
        case "":
            print("大于等于0小于60")
        default:
            print("其他")
        }
        
        // 判断一个范围
        let score = 95
        switch score {
        case _ where score >= 90 && score <= 100:
            print("")
        case let s where s < 90 && s >= 80:
            print("")
        case let s where s < 80 && s >= 60:
            print("")
        case let s where s < 60:
            print("")
        default:
            print("其他")
        }

6.循环

        // 方式1: 仿照oc写
//        for (int i=0; i<3; i++) {
//            NSLog(@"哈哈");
//        }
        for var i = 0; i < 3; i++ {
            print(i)
        }
        
        print("==========")
        // 方式2: for in
        for i in 0..<3 {
            print(i)
        }
        
        print("==========")
        for i in 0...3 {
            print(i)
        }
        
        
        print("==========")
        
        // 方式3: 只需要遍历的次数,不需要当前遍历到哪个位
        
        for _ in 0..<3 {
            print("哈哈")
        }
//        var i = 10
//        while i > 0 {
//            i--
//            print(i)
//        }
        
        
        var i = 10
        // do while 在 Swift 2.0 Xcode 7.0 beta5 
        // 改成repeat while
        repeat {
            i--
            print(i)
        }while (i > 0)

7.字符串

技术分享
    /// 字符串的截取
    func demo4(){
        
        let str = "听说下雨天音乐和辣条更配哟"
        
        // 截取: 下雨天音乐和辣条更配哟
        let r1 = str.substringFromIndex(str.startIndex.advancedBy(2))
        print(r1)
        
        // 截取: 听说下雨天音乐和辣条更
        let r2 = str.substringToIndex(str.endIndex.advancedBy(-2))
        print(r2)
        
        
        // 截取: 下雨天音乐和辣条更
        let startIndex = str.startIndex.advancedBy(2)
        let endIndex = str.endIndex.advancedBy(-2)
        let r3 = str.substringWithRange(startIndex..<endIndex)
        print(r3)
        
        
        // 如果以上的代码不会写,可以把 String 转成 NSString 进行截取
        let range = NSMakeRange(2, str.characters.count - 4)
        let r4 = (str as NSString).substringWithRange(range)
        print(r4)
        
    }
    
    /// 字符串的拼接
    func demo3(){
        
        let name = "老王"
        let age = 18
        // 打印出:我叫老王年龄18
        
        
        // 方式1: 使用 `+`
        let r1 = "我叫" + name + "年龄" + String(age)
        print(r1)
        
        // 方式2: 使用 `\(_常量或者变量名_)`
        let r2 = "我叫\(name)年龄\(age)"
        print(r2)
        
        
        // 使用 formatter 的情况
        
        let h = 9
        let m = 10
        let s = 3
        
        // 输出 09:10:03
        
        let r3 = String(format: "%02d:%02d:%02d", h, m, s)
        print(r3)
        
        let r4 = String(format: "%02d:%02d:%02d", arguments: [h, m, s])
        print(r4)
        
    }
    
    /// 字符串的长度获取
    func demo2(){
        let str = "别哭泣,老王会笑"
        // 获取字符串的长度
        print(str.characters.count)
        print(str.utf8.count)
        print(str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
    }


    /// 字符串的遍历
    func demo1(){
        let str = "别低头,绿帽会掉"
        for value in str.characters {
            print(value)
        }
    }
View Code

8.集合

技术分享
// 合并字典
    func demo7(){
        var dict1 = ["name": "老王", "age": 18]
        let dict2 = ["no": "哈哈", "height": 180, "name": "老李"]
        
        for (k,v) in dict2 {
            dict1[k] = v
        }
        print(dict1)
    }
    
    
    /// 遍历字典
    func demo6(){
        let dict = ["name": "老王", "age": 18]
        for (k,v) in dict {
            print("key:\(k);value:\(v)")
        }
    }
    
    /// 字典的定义以及初始化
    /**
        - 使用 let 定义不可变的字典,使用 var 定义可变的字典
    */
    func demo5(){
        // 类型: [String : NSObject]
//        let dict1 = ["name": "老王", "age": 18]
//        print(dict1)
        
        // 初始化一个空字典
        var dict2 = [String : NSObject]()
        dict2["name"] = "老王"
        dict2["age"] = 18
        print(dict2)
        
        // 这种方式赋值的话,如果字典里面存对应key的键值对的话,会覆盖掉原来的值
        dict2["name"] = "老李"
        print(dict2)
        
//        // 取值
//        let r1 = dict2["name"]
//        print(r1)
        
        // 移除值
        dict2["name"] = nil
        print(dict2)
    }
    
    // 数组的容量,容量就代表数组能够装多少元素
    func demo4(){
        
        var array = [Int]()
        for i in 0..<128 {
            array.append(i)
            // 打印array的容量
            print("当前count:\(array.count),容量是:\(array.capacity)")
        }
    }
    
    // 数组的合并
    func demo3(){
        var array1 = ["老王", "老张"]
        let array2 = ["老李", "小尹"]
        
        array1 += array2
        print(array1)
        
//        let result = array2 + array1
//        print(result)
    }
    
    // 数组的遍历
    func demo2(){
        let array = ["老王", "老张", "老李"]
        
        // 方式1:
        for var i = 0; i < array.count; i++ {
            print(array[i])
        }
        
        print("============")
        // 方式2: for in
        
        for value in array {
            print(value)
        }
        
        // 方式3:
        for (index, value) in array.enumerate() {
            print("index=\(index);value=\(value)")
        }
    }

    /// 数组的定义,初始化
    /**
        - 使用 let 定义不可变数组,使用 var 定义可变数组

    */
    func demo1(){
        
//        var a = ["老王", 10]
//        a.append(NSValue(CGRect: CGRectZero))
        
//        var a = [CGRectZero, CGRect(x: 0, y: 0, width: 10, height: 10)]
//         a.append(CGRectZero)
        
        
        // 定义一个数组
        let array1 = ["老王", "老李", "老张"]
        
        print(array1)
        // 定义一个空数组
        var array2: [Int] = [Int]()
        // 添加元素
        array2.append(1)
        array2.append(2)
        array2.append(3)
        print(array2)
        
        // 数组取值
        print(array2[0])
        
        // 移除值
        array2.removeFirst()
        print(array2)
    }
View Code

9.函数

技术分享
 override func viewDidLoad() {
        super.viewDidLoad()
        // demo1()
        // sum1(10, b: 5)
        // sum2(num1: 4, num2: 6)
        
//        let result = sum3(num1: 5, num2: 7)
//        print(result)
        
        demo()
        
    }


    // 任务1: 定义一个没有参数没有返回值的函数
    // 格式: func 函数名() { __函数执行代码__ }
    func demo1(){
        print("哈哈")
    }
    
    
    // 任务1: 定义一个有参数没有返回值的函数
    // Swift中函数的第一参数名字在调用的时候默认省略
    // 格式: func 函数名(形参名1: 类型, 形参名2: 类型, ...) { __函数执行代码__ }
    func sum1(a: Int, b: Int) {
        print(a + b)
    }
    
    // 带有外部参数的函数
    // 格式: func 函数名(外部参数名1 形参名1: 类型, 外部参数名2 形参名2: 类型, ...) { __函数执行代码__ }
    func sum2(num1 a: Int, num2 b: Int) {
        print(a + b)
    }
    /// 定义一个有参数有返回值的函数(有外部参数的函数)
    // 格式: func 函数名(外部参数名1 形参名1: 类型, 外部参数名2 形参名2: 类型, ...) -> 返回值类型 { __函数执行代码__ }
    func sum3(num1 a: Int, num2 b: Int) -> Int {
        return a + b
    }
    
    // 没有返回值的3种表现形式
    
    // 方式1
    func demoAA(){
        
    }
    
    // 方式2
    func demoBB() -> Void {
        
    }
    
    // 方式3
    func demoCC() -> () {
        
    }
    
    
    // 嵌套函数
    func demo(){
        // 作用范围是在当前 demo 的函数体内
        func haha(){
            print("哈哈")
        }
        
        haha()
    }
View Code

10.闭包

    override func viewDidLoad() {
        super.viewDidLoad()
        demo3A()
        demo3B()
    }
    
    // MARK: - 定义一个有参数有返回值的闭包
    
    // 任务3: 定义一个有参数有返回值的闭包
    func demo3B(){
        // 闭包的类型: (num1: Int, num2: Int) -> Int
        let clourse = { (num1 a: Int, num2 b: Int) -> Int in
            return a + b
        }
        
        let result = clourse(num1: 5, num2: 6)
        print(result)
        
    }
    
    
    // 内部定义一个有参数有返回值的函数
    func demo3A(){
        
        func sum(num1 a: Int, num2 b: Int) -> Int {
            return a + b
        }
        
        let result = sum(num1: 5, num2: 6)
        print(result)
    }
    
    // MARK: - 定义一个有参数没有返回值的闭包
    
    // 任务2: 定义一个有参数没有返回值的闭包
    func demo2B(){
        
        // 有参数没有返回值的闭包类型: (num1: Int, num2: Int) -> ()
        let clourse = { (num1 a: Int, num2 b: Int) in
            print(a + b)
        }
        
        clourse(num1: 10, num2: 1)
    }
    
    
    // 内部定义一个有参数没有返回值的函数
    func demo2A(){
        
        func sum(num1 a: Int, num2 b: Int) {
            print(a + b)
        }
        sum(num1: 10, num2: 1)
    }
    
    // MARK: - 定义一个没有参数没有返回值的闭包
    
    
    // 任务1: 定义一个没有参数没有返回值的闭包
    func demo1B(){
        // 没有参数没有返回值的闭包的类型: () -> ()
        let clourse = {
            print("哈哈")
        }
        clourse()
        
        
        // 定义一个函数,将上面的闭包作为参数传入
//        func haha(callback: () -> ()) {
//            callback()
//        }
    }
    
    // 内部定义一个没有参数没有返回值的函数
    func demo1A(){
        func haha(){
            print("哈哈")
        }
        haha()
    }
    
    // MARK: - 没有返回值的三种情况
    
    // 如果闭包没有参数没有返回值
    
    func demo1(){
        let clourse1 = { (num1 a: Int, num2 b: Int) -> () in
            print("哈哈")
        }
        
        let clourse2 = { (num1 a: Int, num2 b: Int) -> Void in
            print("哈哈")
        }
        
        let clourse3 = { (num1 a: Int, num2 b: Int) in
            print("哈哈")
        }
        
        
    }

 

Swift

标签:

原文地址:http://www.cnblogs.com/fanglove/p/5225492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!