• 第47月第18天 swift函数调用 参数


    1.

    2020 斯坦福(Stanford)Swift 语言教程 

    https://www.bilibili.com/video/BV1EV411C77B?p=2

    https://github.com/Sophia-fez/Standford-CS193p-2020Spring-SwiftUI

    BBCo - iOS开发入门教程 SwiftUI 微博App项目实战

    https://github.com/xiaoyouxinqing/PostDemo

    2.

    func sessionLoadData(){
    //创建URL对象
    let urlString = "http://hangge.com"
    let url = URL(string:urlString)
    //创建请求对象
    let request = URLRequest(url: url!)
    
    let session = URLSession.shared
    let dataTask = session.dataTask(with: request,
        completionHandler: {(data, response, error) -> Void in
            if error != nil{
                print(error.debugDescription)
            }else{
                let str = String(data: data!, encoding: String.Encoding.utf8)
                print(str)
            }
    }) as URLSessionTask
    
      //使用resume方法启动任务
      dataTask.resume()
    }

    https://www.jianshu.com/p/6ca4864b3600

    闭包表达式作为回调函数

    尾随闭包

    如果你需要将一个很长的闭包表达式作为最后一个参数传递给函数,将这个闭包替换成为尾随闭包的形式很有用。尾随闭包是一个书写在函数圆括号之后的闭包表达式,函数支持将其作为最后一个参数调用。在使用尾随闭包时,你不用写出它的参数标签:

     
     
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        if error == nil {
            print("请求成功(String(describing: response))" )
        }
    }.resume()

    https://juejin.im/post/6844903920746102798

    swift5

    SE-0235 在标准库中引入了全新的 Result 类型,它让我们能够更加方便清晰地在复杂的代码中处理 error,例如异步 API。
    Swift 的 Result 类型是用枚举实现的,其中包含了 success 和 failure。它们两者都使用泛型,因此你可以为它们指定任意类型。但是 failure 必须遵循 Swift 的 Error 协议。
    为了进一步演示 Result,我们可以写一个网络请求函数来计算用户有多少未读消息。在此示例代码中,我们将只有一个可能的错误,即请求的字符串不是有效的 URL:
    
    enum NetworkError: Error {
        case badURL
    }
    复制代码fetch 函数将接受 URL 字符串作为其第一个参数,并将 completion 闭包作为其第二个参数。该 completion 闭包本身将接受一个 Result,其中 success 将存储一个整数,failure 将是某种 NetworkError。我们实际上并没有在这里连接到服务器,但使用 completion 闭包可以让我们模拟异步代码。
    代码如下:
    import Foundation
    
    func fetchUnreadCount1(from urlString: String, completionHandler: @escaping (Result<Int, NetworkError>) -> Void)  {
        guard let url = URL(string: urlString) else {
            completionHandler(.failure(.badURL))
            return
        }
    
        // 此处省略复杂的网络请求
        print("Fetching (url.absoluteString)...")
        completionHandler(.success(5))
    }
    复制代码要调用此函数,我们需要检查 Result 中的值来看看我们的请求是成功还是失败,代码如下:
    
    fetchUnreadCount1(from: "https://www.hackingwithswift.com") { result in
        switch result {
        case .success(let count):
            print("(count) 个未读信息。")
        case .failure(let error):
            print(error.localizedDescription)
        }
    }
    复制代码在开始在自己的代码中使用 Result 之前,你还有三件事应该知道。
    首先,Result 有一个 get() 方法,如果存在则返回成功值,否则抛出错误。这允许你将 Result 转换为常规会抛出错误的函数调用,如下所示:
    
    fetchUnreadCount1(from: "https://www.hackingwithswift.com") { result in
        if let count = try? result.get() {
            print("(count) 个未读信息。")
        }
    }
    复制代码其次,Result 还有一个接受抛出错误闭包的初始化器:如果闭包返回一个成功的值,用于 success 的情况,否则抛出的错误则被传入 failure。
    举例:
    
    let result = Result { try String(contentsOfFile: someFile) }
    复制代码第三,你可以使用通用的 Error 协议而不是你创建的特定错误的枚举。实际上,Swift Evolution 提议说道“预计 Result 的大部分用法都会使用 Swift.Error 作为 Error 类型参数。”
    因此你要用 Result 而非 Result。这虽然意味着你失去了可抛出错误类型的安全性,但你可以抛出各种不同的错误枚举,其实这取决于你的代码风格。

    https://developer.aliyun.com/article/716433

  • 相关阅读:
    让div 充满整个body GIS
    fortuneclient 学习 (客户端接受数据) GIS
    错误 1 error C1083: 无法打开包括文件:“QNetworkProxy”: No such file or directory GIS
    qt fortuneserver 例子学习 ( 给客户端发送消息) GIS
    new操作符(new operator) 和 new操作(operator new)的区别。 GIS
    qt 控件 GIS
    c++ 顺序容器 GIS
    将一个div 分成两列 也可以分成多列 GIS
    控件模板 1
    WPF简单写写。。。
  • 原文地址:https://www.cnblogs.com/javastart/p/13521766.html
Copyright © 2020-2023  润新知