GVKun编程网logo

如何使用Swift @autoclosure(如何使用抗原检测试剂盒)

12

在本文中,我们将为您详细介绍如何使用Swift@autoclosure的相关知识,并且为您解答关于如何使用抗原检测试剂盒的疑问,此外,我们还会提供一些关于6.5Swift中的闭包(Closure)详解

在本文中,我们将为您详细介绍如何使用Swift @autoclosure的相关知识,并且为您解答关于如何使用抗原检测试剂盒的疑问,此外,我们还会提供一些关于6.5 Swift中的闭包(Closure)详解 [Swift原创教程]、ios – Firebase 3.6.0(Auth) – 使用Swift 3.0检测特定错误、ios – Swari 1.2中的Variadic @ autoclosure?、ios – Swift Closure为什么调用函数返回错误?的有用信息。

本文目录一览:

如何使用Swift @autoclosure(如何使用抗原检测试剂盒)

如何使用Swift @autoclosure(如何使用抗原检测试剂盒)

assert在Swift中编写时,我注意到第一个值键入为

@autoclosure() -> Bool

使用重载的方法返回通用T值,并通过进行测试LogicValue protocol

但是严格遵守眼前的问题。似乎要@autoclosure返回一个Bool

编写不带任何参数并返回Bool的实际闭包是行不通的,它要我调用闭包使其进行编译,如下所示:

assert({() -> Bool in return false}(), "No user has been set", file: __FILE__, line: __LINE__)

但是,仅通过Bool即可:

assert(false, "No user has been set", file: __FILE__, line: __LINE__)

那么发生了什么?什么@autoclosure

编辑: @auto_closure已重命名@autoclosure

答案1

小编典典

考虑一个带有一个参数的函数,一个不带参数的简单闭包:

func f(pred: () -> Bool) {    if pred() {        print("It''s true")    }}

要调用此函数,我们必须传递一个闭包

f(pred: {2 > 1})// "It''s true"

如果我们省略花括号,我们将传递一个表达式,这是一个错误:

f(pred: 2 > 1)// error: ''>'' produces ''Bool'', not the expected contextual result type ''() -> Bool''

@autoclosure在表达式周围创建一个自动关闭。因此,当调用者编写类似的表达式时2 > 1,它会自动包装到一个闭包中,以{2 >1}在传递给之前变为f。因此,如果我们将其应用于函数f

func f(pred: @autoclosure () -> Bool) {    if pred() {        print("It''s true")    }}f(pred: 2 > 1)// It''s true

因此,它仅适用于表达式,而无需将其包装在闭包中。

6.5 Swift中的闭包(Closure)详解 [Swift原创教程]

6.5 Swift中的闭包(Closure)详解 [Swift原创教程]

原文:http://coolketang.com/staticCoding/5a99261ed50eee2ea303773d.html

1. 本节课将为你演示闭包的使用,闭包功能使编码更加简洁,符合开发语言的现代、简便明了的特点。



2. 首先定义一个函数类型的变量,它拥有两个整型参数,并返回一个整型的结果。等号下方的大括号,是用来实用一个函数功能的代码块。
3. 然后在大括号内,输入两行代码。前一行代码,用来声明函数代码块的参数和返回值信息,然后将对参数的操作,放置在in的下方。
4. 通过该函数类型的变量,即可调用函数的功能:用来获得两个参数的和。
5. 这里创建了一个函数,它同样可以实现和上方代码相同的功能。
6. 调用的方式也是一样的。
7. 在使用闭包来声明一个函数类型的变量时,可以省略对变量类型的定义,系统会自动推断出它的类型。
8. 接着使用相同的代码,实现函数的功能即可。
9. 其实我们还有更加简单的方式,在等号的右侧,通过一个省略了参数声明的闭包语句,给变量赋予了返回两个参数之和的函数功能。
10. 使用该函数变量,计算两个参数的和。
11. 这种函数变量的声明方式,仍然可以进行简化,使用$0和$1表示第一个参数和第二个参数,并且省略了return操作符。
12. 使用该函数变量,计算两个参数的和。
13. 闭包语句随处可见,例如通过系统提供的排序方法sorted,对一个数组进行排序,在此通过小于号,采用升序排列的方式。点击显示结果图标,显示结果列表。
14. 排序方法共进行了4次操作,点击显示结果图标,隐藏结果列表。
15. 继续代码的编写。
16. 输出排序后的数组,从右侧可以看出使用闭包排序后的效果。
17. 闭包语句经常和方法声明配合使用,但是闭包语句通常放在最后一个参数的位置。在此添加一个方法,该方法拥有一个函数类型的参数,最后返回由该函数参数执行后的结果。
18. 然后使用闭包语句,使用第三个参数的函数功能。
19. 这样就可以将其它的函数,作为该函数的参数进行调用。
20. 同样可以采用更加简便的方式,完成相同的功能。在此只使用一个加号,代替求和闭包。观察右侧输出的结果,和上面的结果是一致的。
21. 你甚至可以将加号,修改为乘号。
22. 无论加号、乘号,还是其它运算符号,其实都是对本行语句中的闭包语句的一种省略的写法。点击显示结果图标,查看本行代码执行的结果,并结束对闭包功能的讨论。
23.
本文整理自:《Swift4互动教程》,真正的 [手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载: https://itunes.apple.com/cn/app/id1320746678 ,或扫描本页底部的二维码。课程配套素材下载地址: 资料下载

ios – Firebase 3.6.0(Auth) – 使用Swift 3.0检测特定错误

ios – Firebase 3.6.0(Auth) – 使用Swift 3.0检测特定错误

我正在尝试找出如何检测某个错误.假设登录失败,我想检查错误是否说输入的帐户不存在,然后告诉观众.如果可能的话,所有其他错误也是如此.

在Parse中,我会检查error.code是否等于某个数字,不确定它是否与Firebase相同或类似.

解决方法

用这个:-
if let errCode = FIRAuthErrorCode(rawValue: err!._code) {

                switch errCode {
                case .errorCodeInvalidEmail:
                    print("invalid email")
                case .errorCodeEmailAlreadyInUse:
                    print("in use")
                default:
                    print("Other error!")
                }

            }

其中err是来自firebase的错误

ios – Swari 1.2中的Variadic @ autoclosure?

ios – Swari 1.2中的Variadic @ autoclosure?

既然@autoclosure是参数声明的一部分而不是类型,那么如何声明函数采用可变量的自动爆破?

之前:

public func coalesce<T>(all : @autoclosure () -> T? ...) -> T? {
    for f : () -> T? in all {
        if let x = f() { return x }
    }
    return nil
}

之后:???

解决方法

我打开了rdar:// 19782845,“Swift 1.2:不再支持Variadic自动关闭”,并得到了Apple Developer Relations的以下回复:

This issue behaves as intended based on the following:

@autoclosure is only allowed on parameters of function type,and varargs is an array. This is not expected to work.

ios – Swift Closure为什么调用函数返回错误?

ios – Swift Closure为什么调用函数返回错误?

只是学习闭包和嵌套功能.鉴于下面的嵌套函数:

func printerFunction() -> (Int) -> () {
    var runningTotal = 0
    func printInteger(number: Int) {
        runningTotal += 10
        println("The running total is: \(runningTotal)")
    }
    return printInteger
}

为什么调用func本身有错误,但是当我将func分配给常量时没有错误? printAndReturnIntegerFunc(2)将2 Int作为参数传递给返回值?

printerFunction(2) // error
let printAndReturnIntegerFunc = printerFunction() 
printAndReturnIntegerFunc(2) // no error. where is this 2 going??

解决方法

首先,你在这里得到错误printerFunction(2)因为printerFunction不能接受任何参数,如果你想给出一个参数,那么你可以这样做:

func printerFunction(abc: Int) -> (Int) -> (){


}

这将工作正常:

printerFunction(2)

之后,您将该函数的引用提供给另一个变量,如下所示:

let printAndReturnIntegerFunc = printerFunction()

这意味着printAndReturnIntegerFunc的类型是这样的:

这意味着它接受一个I​​nt,它将返回void,所以这将工作:

printAndReturnIntegerFunc(2)

今天关于如何使用Swift @autoclosure如何使用抗原检测试剂盒的介绍到此结束,谢谢您的阅读,有关6.5 Swift中的闭包(Closure)详解 [Swift原创教程]、ios – Firebase 3.6.0(Auth) – 使用Swift 3.0检测特定错误、ios – Swari 1.2中的Variadic @ autoclosure?、ios – Swift Closure为什么调用函数返回错误?等更多相关知识的信息可以在本站进行查询。

本文标签: