Tag: 关闭

Swift iOS访谈:关于闭包和功能的所有信息

函数: 函数是执行特定任务的自包含代码块。 功能具有三种类型。 全局功能:具有名称,但不捕获值。 嵌套函数:具有名称和捕获值 闭包:(函数的特殊类型)没有名称,但可以获取值 ######################################## 闭包 :闭包是自包含的功能块 ,可以在代码中传递和使用。 闭包可以从定义闭包的周围环境中捕获任何常量和变量的引用 。 闭包类似于lambda和block ######################################## 转义闭包:将闭包传递给函数但在函数返回后调用。 闭包可以转义的一种方法是将其存储在函数外部定义的变量中。 ######################################## 非转义闭包:当闭包传递给函数但在函数返回之前调用。 默认情况下,非转义关闭是关闭类型。 在非转义中,我们可以使用self,因为闭包是在函数返回之前执行的,因此self肯定会存在。 ######################################## 自动闭包:自动闭包是一种闭包,它是自动创建的,用于包装作为参数传递给函数的表达式。 调用时它不接受任何参数,但返回包装在其中的expression的值。 func f(pred:@autoclosure()-> Bool){ 如果pred(){ 打印(“这是真的”) } } f(pred:2> 1) //真 ######################################## 尾随闭包:如果需要将长闭包表达式作为最终参数传递给函数,则建议将其作为尾随闭包传递。 在函数调用的括号后面写上结尾的闭包,即使它仍然是函数的参数。 func sum(从:Int,到:Int,闭包:(Int)->(Int))-> Int { var sum = 0 因为我从…到{ 总和==闭包(i) } 返还金额 } //正常关闭通话 sum(从:0,到:5,闭包:{ $ 0 * 10 […]

RxSwift中flatMap函数的改进

如何对RxSwift和许多闭包感到满意 嘿! 如果您阅读了此书 ,则可能会精通RxSwift和ARC ,了解弱关键字和无主关键字之间的区别。 如果否,请熟悉它,然后回来! 在我的第一篇文章中,我想向您介绍我的flatMap改进。 我立即开始遇到问题… 例如,我们有两个请求: Login和LoadPosts 。 登录后,我想获取当前用户的帖子: 弱 ,我选择你! 现在您可能想要将以前的代码更改为此代码: 但是,当您有很多flatMap函数时,它看起来是如此混乱—我们不想看到混乱的代码! 只有优雅,优美的代码! 是时候进行出色的扩展了: 现在我们的要求看起来像这样: 所有flatMap函数都有完整的代码段:

TinyExtension:简化的空闭包

此文章同时提供中文版本: TinyExtension:空封闭简化 在Swift中,我们经常使用Closure。 当然,大多数Closure用于实现特定的功能块,但是在某些情况下,我们将使用空Closure: 情况1:忽略回调 通常,将实现回调方法,但有时接口提供的功能比我们需要的更多。 例如,我们需要使用以下功能: func sampleRequest(success: (Bool, String) -> (), failure: () -> ()) { // some network request logic // with some local variable store logic } 通常,我们将实现success和failure回调,但是在某些情况下,我们将忽略某些回调。 例如,在预加载数据时,我们不需要处理failure回调。 毕竟,预加载是在后台调用的,错误消息永远不会响应UI,因此可以删除。 我们调用的代码如下: sampleRequest(success: { (isSuccess, text) in // do some complex thing }, failure: {}) 在这里,我们使用了空的Closure。 实际上,这很简单,因为failure回调不携带任何数据。 但是,如果我们的预加载在方法中完成,则也无需实现success回调,调用的效果将变为: sampleRequest(success: { _, _ […]

功能性Swift:闭包{}

闭包是可以独立传递的功能块,可以在代码中传递和使用。 – 苹果 闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用,因此称为闭包。 您可以将闭包视为一个没有自己名称的函数,并从其环境中捕获任何值。 函数和闭包是Swift中的一流对象 :您可以存储它们,将它们作为函数的参数传递,并像对待其他任何值或对象一样对待它们。 将闭包作为完成处理程序传递是许多API中的常见模式。 标准Swift库主要将闭包用于事件处理和回调。 函数是执行特定任务的独立代码块。 您为函数指定一个名称,该名称可以标识其功能,该名称用于“调用”该函数以在需要时执行其任务。 您可以使用func关键字定义一个函数。 函数可以不带太多参数,可变参数而返回任何一个或多个参数。 函数类型由参数类型和函数的返回类型组成。 对于上面的示例,函数类型为: (Int, Int) -> Int 可以将其理解为:“具有两个参数的函数,都具有Int类型,并且都返回Int类型的值。”可以将函数类型设置为参数或函数的返回类型。 可以将函数类型分配给任何这样的变量: var mathFunction:(Int,Int)-> Int =添加 函数是闭包的特殊情况。 闭包采用以下三种形式之一: 全局函数:它们具有名称,不能捕获值。 嵌套函数:它们有一个名称,可以从其封闭函数中捕获值。 闭包表达式:它们没有名称,可以从其周围的上下文中捕获值。 可以通过将函数类型放在大括号内并in返回类型后in关键字中来创建闭包。 单表达式闭包可以通过从声明中省略return关键字来隐式返回其单表达式的结果。 对于多行表达式闭包,不能省略return关键字。 如果由于函数的最后一个参数而需要将闭包表达式传递给函数并且闭包表达式太长,则可以将其写为尾随闭包。 在函数调用的括号()后面写一个结尾的闭包,即使它仍然是函数的参数。 使用尾随闭包语法时,不要在函数调用的过程中为闭包编写参数标签。 如果闭包是方法的最后一个参数,那么swift允许您这样编写: 使用reduce()的结尾封闭示例 尾随闭包语法的使用可以在闭包支持的功能之后立即整齐地封装闭包的功能,而无需将整个闭包包装在reduce(_:)方法的外部括号内。 闭包可以从定义它的周围上下文中捕获常量和变量。 然后,闭包可以从其主体内部引用和修改这些常量和变量的值,即使定义常量和变量的原始范围不再存在。 在Swift中,最简单的可以捕获值的闭包形式是嵌套函数,它写在另一个函数的主体内。 嵌套函数可以捕获其外部函数的任何自变量,还可以捕获在外部函数内定义的任何常量和变量。 Swift文档中给出的示例 此makeIncrementer函数接受一个参数(即Int)作为输入,并返回一个函数类型,即() -> Int 。 这意味着它将返回一个function ,而不是一个简单的值。 它返回的函数没有参数,并且每次调用都返回一个Int值。 在这里, amount是参数, runningTotal被声明为变量并初始化为0。嵌套函数incrementer runningTotal从周围的上下文中捕获amount和runningTotal […]

在Swift中作为观察员的闭包

随着Swift进入编程领域,为开发人员打开了大门,使开发人员能够通过使事情变得简单和紧凑将其思想转化为Apple平台上的应用程序。 Swift引入了许多新功能和概念,但是在这篇文章中,我们将讨论Closures,这是当今iOS开发人员中非常有趣且最流行的编码实践之一。 根据Swift文档: 闭包是可以独立传递的功能块,可以在代码中传递和使用。 闭包不仅是Swift独有的,而且在Swift引入之前,它们就存在于其他编程/脚本语言中。 Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambda。 我们大多数人都不熟悉闭包,但是很长一段时间以来就在我们的代码中使用它们。 在我们日常的编码实践中,有一些实例我们间接使用了闭包,但我们对此并不了解。 以下是下面提到的几个示例: 在第三方API的帮助下从服务器获取数据; 在这里,您不必等待数据任务完成并异步获取数据,并在收到响应后使用@escaping闭包将其还原。 使用视图动画,因为某些功能需要异步执行。 闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。 这称为关闭这些常量和变量。 让我们快速看一下如何定义闭包: {(params)-> returnType in // statements} 让我们来看看闭包表达式: let fullname:(String,String)-> String = {(firstName,lastName)返回firstName +“” + lastName} fullname(“ Prashant”,“ Gautam”)//结果为Prashant Gautam 在上面的表达式中,闭包接受String类型的两个参数并将其连接起来并返回新的字符串。 闭包表达式中的参数可以是输入输出参数。 我们也可以使用可变参数,但您必须命名可变参数。 元组也可用作参数类型和返回类型。 注意: 闭包表达式语法中的参数不能具有默认值。 为了这篇文章的主题,我被限制不要过多地研究闭包。 您可以在此处找到有关闭包的广泛信息。 作为iOS开发人员,我们都知道Notifications和KVO 。 两者都用于通知多个对象,以响应应用程序或对象属性的某些更改。 让我们在闭包的帮助下创建自己的观察者。 相信我,将您自己的代码用于同一目的非常有趣。 让我们举一个基于UITabbar的应用程序的简单示例。 演示应用程序中有两个选项卡。 在第一个选项卡上,我们有一个按钮,该按钮触发更新以将新消息反映给作为观察者添加的所有对象。 首先,我们创建一个基于标签栏的应用程序,并在FirstViewController内添加一个按钮“ Update ”,以触发更新的消息。 为此按钮添加操作updateAction(_ sender:Any) 。 […]

在Swift-4中玩闭包(第-1部分)

根据快速的编程语言 闭包是可以独立传递的功能块,可以在代码中传递和使用。 Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambda。 简单来说,闭包是没有名称的函数,它们只是从定义它们的上下文中捕获并存储对任何常量和变量的引用。 这称为关闭这些常量和变量。 闭包表达式语法 {(参数)->返回类型 陈述 } 让我们从一个简单的闭合开始,它打印一条消息 在上面的示例中,创建了一个简单的闭包并分配给myfirstClosure 。我们也可以说创建了一个没有名称的函数,我们可以像普通函数一样调用它。 myfirstClosure() 带参数的闭包 闭包可以接受参数。要使闭包接受参数,我们必须在括号内列出它们,然后我们必须在 关键字中编写 这样,闭包主体就可以在此之后启动。带参数的闭包示例如下。 让myfirstClosure = {(withParameter:String)在 打印(“最后,我用\(withParameter)创建了我的第一个闭包”) } myfirstClosure(“ firstparameters”) 而输出将是 最后,我用firstparameters创建了我的第一个Closure 具有返回值类型的闭包 闭包也可以返回值。因此,要使闭包返回值,我们需要对闭包进行少量修改,例如Syntax。在括号中列出参数后,我们必须编写-> datatype,然后输入In Keyword,最后使用return像普通函数一样。示例如下。 闭包作为参数:- 我们也可以像函数的参数一样传递闭包,就像我们将字符串或整数作为函数的参数传递一样。但是这样做时,我们在语法上要做的事情很少。在函数内部定义每个参数类型时,当闭包用作函数内的参数时,如果我们什么都不返回,则需要将闭包(参数)类型指定为()-> datatype ,我们可以简单地将语法更改为()-> Void。 这里的void什么都没有。示例定义如下 导入UIKit 让闭包= { 打印(“我是一个简单的封闭者”) } func simplefunctionWithClosures(closure:()-> Void){ 打印(“要求关闭”) 关闭() print(“ Closure被调用,用作函数的参数”) } simplefunctionWithClosures(关闭:关闭) 输出在这里 尾随闭包 当我们需要将闭包表达式作为函数的最终参数传递给函数且闭包表达式过长时,将其写为尾随闭包可能会很有用。尾随闭包会在函数调用的括号后编写,即使它仍然存在函数的参数。当使用尾随闭包语法时,我们不会在函数调用的过程中编写闭包的参数标签。这是swift官方文档所说的。 我们将在本文中讨论更多有关此的内容。

消息以关闭迅速传递。

大家好,希望大家一切都好。 今天,我将向您展示如何使用闭包进行消息传递。 基本上,我将向您展示如何通过Protocols实现执行自定义行为的替代方法。 我不知道您对闭包有多熟悉,下次我将尝试使用闭包。 现在,对闭包不太熟悉的人可以将其作为更简单的方法或将消息传递作为黑手。 我将尝试使用带有自定义单元格的表格视图示例进行说明。 您可以在下方看到我们要实现的目标。 该视图控制器具有一个表视图,该表视图具有一些名称以及它们前面的一个按钮。 表格视图下方也有一个空白区域。 每次按下按钮,我们都会在此区域执行一项活动。 如您在下面看到的,我们在单击按钮时对名称进行了动画处理。 通常,我们在委托和协议的帮助下执行此操作。 为此,我们必须使用按钮操作方法定义协议。 这样,无需创建自定义协议和委托。 我们需要一个类型为闭包的变量。 你们都在想我在说什么😅。 是的,我们需要一个在其中包含闭包的变量。 见下文 这个名为buttonAction的变量将持有一个不带参数的闭包,并返回void。 我们将其作为可选变量,这样,如果任何一个单元格都没有动作,我们也将能够处理这种情况。 与往常一样,我们将在自定义单元格中为按钮创建IBAction 。 见下文 在表视图的类中,我们将闭包分配给每个单元格的闭包类型对象。 见下文 现在我们已经准备就绪,可以执行了。 但是在此之前,让我解释一下我们实际上在做什么。 在这里,我们正在做一个非常简单的活动来完成我们的任务。 我们正在定义一个变量,它将像通常定义的那样保留一个闭包 。 UILable,UIImage等 我们将为tableView_cellFOrRowAt_IndexPath中的每个单元格在此变量中传递一个可执行的闭包 。 同样,我们设置textLabel和detailTextLabel值。 在单元格类中,我们将发现buttonAction是否分配了闭包。 如果它有一个闭包,那么我们只需要执行那个。 我们已经做到了。 伙计们,这是我在关闭时传递的消息。 就像我一直说的那样,我还在学习,我相信学习与分享 。 您也可以从此链接下载演示项目 。 希望对您有所帮助。 我随时欢迎您提出建议,请至少放下其中一个。 非常感谢。

功能编程:闭包参考周期和修复

Article_1链接→ 功能迅速:关于闭包的全部。 Article_2链接→ iOS中的Lazy var swift。 请阅读以上两篇文章以继续。 假设您对函数式编程和闭包有很好的了解,那么让我们开始吧。 考虑一类Human 。 它具有一个init方法,该方法接受firstName和lastName作为参数。 它还有一个名为fullName的lazy var closure ,该lazy var closure不接受任何内容并返回String 。 它是()->String类型的。 在这里,当我们调用init方法时,将创建一个新的Human对象。 我们将此对象分配给可选类型humanObj 。 在下一行中,当我们将humanObj的值设置为nil ,将deinit{}方法。 您可以看到控制台打印在deinit方法中给出的文本。 现在,尝试在创建对象之后访问fullName闭包。 然后尝试将对象设置为nil 。 var humanObj:人类? = Human(firstName:“ John”,lastName:“ Doe”) let fullName = humanObj?.fullName humanObj = nil 由于闭包强烈引用self因此不会调用deinit{}方法。 释放对象时将调用deinit方法。 解决方法 我们可以在捕获列表中使用self来使用weak引用或unowned引用来打破强引用周期。 如果您不知道什么是捕获列表,请阅读顶部提到的文章。 弱 弱引用是指不会对其引用的实例保持强大控制的引用,因此不会阻止ARC处置所引用的实例。 此行为可防止参考成为强大参考周期的一部分。 由于弱引用可能为nil ,因此捕获的变量变为可选。 因此,我们应该使用guard来安全地拆开它: 懒惰的var fullName :()->字符串= […]

斯威夫特-封闭第2部分

Merhabalar👋封闭部分-2 ilekaldığımızyerden devam ederek,捕获值,尾随,逃逸ve自动关闭函数konularınagözatacağız。 哈迪(Hadi)Başlayalım。 👊 捕捉价值 捕获işlemidıştakibloğaaitdeğişkenlerinveyadıştakifonksiyonun parametrelerininkullanılmasınaolanaksağlayanbir derleyici optimizasyonişlemidir。 我们是一家出版物,创建有关iOS开发的帖子。如果您喜欢它并想加入我们,请填写表格! tinyurl.com/jointowhoknows 闭包– Swift编程语言(Swift 4.2) 注意如果您不熟悉捕获的概念,请不要担心。 下面在捕获中详细说明… docs.swift.org Swift 3中的转义和不转义闭包-Swift未装箱 函数和闭包是Swift中的一流对象:您可以存储它们,并将它们作为参数传递给函数,然后… swiftunboxed.com 尾随闭包语法–免费的Swift黑客教程 通过这些免费教程学习iOS的Swift编码 www.hackingwithswift.com

Swift第一部分的闭包

如何创建没有名字的功能! 介绍: 闭包是swift最有用的未来之一。在这三部分的文章中,我将以现实生活中的例子从最基本的方面来解释闭包。 什么是闭包: 闭包只不过是没有名字的函数。它意味着闭包是一个没有名字的函数,用不同的语言来调用,就像:匿名函数,回调,lambdas等。 换句话说,闭包是自我包含的功能块,可以在代码中传递和使用。 在深入探讨闭包之前,我们先创建一个函数并将其转换为闭包。这使我们的概念更加清晰。 简单功能: 如果我们考虑功能和闭包,那么我们可以像这张图那样说明闭包和功能。 让我们讨论闭包语法。 基本语法: 关闭以大括号开头,以大括号结束。这是简单的关闭语法: {{argumentName:Type)-> ReturnTypein //声明和其他 // …… // ….. 返回} 这是闭包的基本语法,以大括号开头,而不是参数名称及其类型,比返回类型比关键字中的语句要大,并且比return还要大。 范例一: 闭包的另一个基本示例,参数取两个值并进行计算并将其返回。如果执行此闭包,则可以执行以下操作。 let result = clasureOne(10,50)//结果应为500 示例二: 该闭包采用两个字符串,并将其作为单个字符串返回给字符串。顺便说一句,此闭包也分配给closureTWo变量。 var fullName = closureTWo(“ Mahmudul”,“ Hasan”) // fullName变量现在获得了“ Mahmudul Hasan” 以不同方式创建: 我们知道Swift是一种类型 – 安全的语言,因此在函数或闭包中,我们需要定义每个变量或常量的类型,然后隐式或显式初始化它。对于此功能,我们可以通过多种方式创建闭包Let Start .. 这个addTwoNumber闭包我们在equal =之前定义类型,并从闭包头中删除类型,这样我们可以这样写。 我们可以省略标题的返回类型,也可以变得足够聪明以至于无法理解 现在我们也可以从主体中删除return关键字。 现在我们可以像这样写在一行 现在非常简写,而且非常简短 因此这里是一个有趣的swift闭包,了解它有两个变量并将其添加并返回变量addTwoNumber 。因为我们明确定义了它的类型。而swift的默认参数名称为$ 0,$ 1,$ […]