iOS相关Swift基础iOS Developer

Swift 基本语法(函数, 闭包)

2017-05-25  本文已影响719人  Mr_Lucifer

前言

接上篇, 这篇聊一下 Swift中的 函数, 闭包

一 函数

    // MARK: -函数定义  格式 func 函数名(形参列表) -> 返回值类型 {}
    func sum(a: Int, b: Int) -> Int {
        return a + b
    }
 // MARK: - 外部参数
    /** 
        - 外部参数就是在 形参前面加一个名字
        - 外部参数不会影响函数内部的细节
        - 外部参数使用'_', 调用时 会忽略形参的名字
     */
    func sum1(num1 x: Int, num2 y: Int) -> Int {
        return x + y
    }
    func sum2(_ x: Int, _ y: Int) -> Int {    
        return x + y
    }

// MARK: - 默认值
    /** 
        - 通过给参数设置默认值, 在调用时候, 可以任意组合参数, 如果不指定就使用默认值
     */
    func sum3(x: Int = 1, y: Int = 3) -> Int {
        
        return x + y
    }

   /** 测试默认值 调用
        print(sum3())  => 4
        print(sum3(x: 10, y: 30))  => 40
        print(sum3(x: 10))  => 13
        print(sum3(y: 30))  => 31
     */

 // MARK: - 无返回值
    /** 
        - 直接省略 () Viod 
     */
    func demo() {
        print("直接省略")
    }

二 闭包

func demo1() -> () {
        
        /** 
         *  闭包中 参数, 返回值, 实现代码都写在 {} 中
         *  需要使用关键字 'in' 分割定义和实现
         *  {形参列表 -> 返回值类型 in // 实现代码}
         */
        
        // 1. 最简单闭包
        // () -> () 无参无返回值闭包, 连 'in' 也可以省略
        let b = {
        
            print("hello")
        }
        b()
        
        // 2. 有参数无返回值闭包
        // (Int, Int) -> ()
        let b1 = { (a: Int, b: Int) -> () in
        
            print(a + b)
        }
        b1(1, 99)
        
        // 3. 有参数有返回值
        // (Int, Int) -> Int
        let b2 = { (x: Int, y: Int) -> Int in
        
            return x * y
        }
        print(b2(10, 12))
        
    }
// MARK: - 闭包作为函数的参数
    // ( 闭包名:()->() ) -> ()
    // Function types cannot have argument labels
    // 函数类型不能有参数标签, (在Swift3中, 把闭包的参数名 取消了)
    func loadData(success : @escaping(_ : [String]) -> ()) -> () {
        
        let json = ["新闻", "图片", "热点"]
        
        success(json)
    }
    
    //@noescape : 如果这个闭包是在这个函数结束前被调用,就是非逃逸的闭包(默认)。
    //@escaping : 如果这个闭包是在函数执行完后才被调用,调用的地方超过了这函数的范围,所以叫逃逸闭包。
 /*调用*/
 // 尾随闭包 : 如果函数最后一个参数是闭包, 函数参数可以提前结果, 最后一个参数直接使用 {} 包装闭包的代码
        // (相当于没有参数)
        loadData { (result) in
            
            print(result)
        }
        // 按照函数本身编写结果
        loadData(success: { (result) -> () in
        
            print(result)
        })
        
        // 闭包与block相同, 也有循环引用, 推荐用 [weak self]
        loadData { [weak self] (result) in
            
            print(self?.view as Any)
            print(result)
        }
 // MARK: - 网络请求
    func handleData(urlStr: String, completion: @escaping(String) -> ()) -> () {
        
        let url0 = URL(string: urlStr)
        
        guard let url = url0 else {
            print("网址为空")
            return
        }
        
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            
            guard let data = data else {
                
                print("网络请求失败 \(String(describing: error))")
                return
            }
            
            let html = String(data: data, encoding: .utf8)
            completion(html!)
            
        }.resume()
        
    }
 /*调用*/
      handleData(urlStr: "https://wwww.baidu.com") { (result) in
            
           print(result)
      }

Swift 基础 先介绍三篇, 以后有机会再写.

以 上 !

上一篇下一篇

猜你喜欢

热点阅读