zoukankan      html  css  js  c++  java
  • 第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

  • 相关阅读:
    浅谈页面的瀑布流布局
    前端常用动画库
    JavaScript七宗罪和一些槽点
    prototype与 _proto__的关系
    Javascript之傻傻理不清的原型链、prototype、__proto__
    C#开发微信门户及应用(26)-公众号微信素材管理
    C#开发微信门户及应用(25)-微信企业号的客户端管理功能
    基于InstallShield2013LimitedEdition的安装包制作
    Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)
    Entity Framework 实体框架的形成之旅--Code First的框架设计(5)
  • 原文地址:https://www.cnblogs.com/javastart/p/13521766.html
Copyright © 2011-2022 走看看