Swift 中有多少种编写闭包的方法?

2024-02-06

问题:在 swift 中编写任何闭包时需要考虑哪些基本规则和边界(就语法而言)?


闭包有多种类型,我们可以使用带有 void return 、单参数返回和多返回类型的闭包,

我们可以用inout , typealaise , escaping , autoclosure关键词以及闭包中的功能。

实际上,闭包是带有参数和返回类型的自包含块

这里我添加了闭包代码

类 ClouserVC : UIViewController{

var clouserPrint = {
    print("Clouser just print value")
}

var closureInoutData = { ( value : inout String) in
    value = "Value Changed"
}


typealias colsureTypealaise = ((String) -> Void)

var valueforInout = "initail value"

var valueforClosureInout = "Clouser Value"

override func viewDidLoad() {
    super.viewDidLoad()
    self.clouserPrint()
    self.closureWithFun {
        print("==>This from closureWithFun , but it pass empty data")
    }

    print("=!=> Value before inout Closure" , valueforInout)
    self.closureInoutData(&valueforInout)
    print("=!=> Value after inout Closure" , valueforInout)


    self.closureWithValidFun { (argument) -> String in
        print("===> getting passed value from closure \(argument)")
        return ""
    }

    self.closureWithTypeAlise { (typeAlasie) in
        print("====> This  value declared in Typealasie , \(typeAlasie)")
    }

    self.closureWithMultipleParams { (strValue, intValuse) -> (String) in
        print("=====> get mupltiple datas from function , \(strValue) , \(intValuse.description)")
        return strValue
    }

    let closureReturns  = self.funcWithClouserReturn(argument: 10)

    self.funcwithEscapingClosure { (escaping) in
        print("=======> get escaping closure values === \(escaping)")
    }


    print("=8=> Value before inout FunClosure" , valueforClosureInout)
       self.funcWithClosureInOutParam { (inoutData) in
                 print("=*8=>",inoutData )
                inoutData = "valueChangefor InoutClosure"
        }
    print("=8=> Value after inout FunClosure ===" , valueforClosureInout)

}

func closureWithFun(argument : ()-> Void){
    print("==>Function with argument closure , but it passes empty data")
}

func closureWithValidFun(argument : (String) -> String){
    print("===> Function have valid argument")
    argument("value_passed_from_by_this_type")
}


func closureWithTypeAlise(argumenttype :colsureTypealaise){
    print("====> Function have Typealaised params")
    argumenttype("Hello Alaise")
}

func closureWithMultipleParams(multiple params : (String,Int) -> (String)){
    print("=====> Here we pass multiple params to returnback to its function call" )
    params("Multiple",2)
}

func funcWithClouserReturn(argument params : Int) -> () ->(String){
    print("======> Closure returns from the function")
    func closuserInfunc() -> String{
        return "closure value inside the func \(params)"
    }

    return closuserInfunc
}


func funcwithEscapingClosure(argument Param: @escaping(String)->()){
    print("=======> This func have Excaping closure as a param")
    Param("Hello")
}

func funcWithClosureInOutParam(argument param : (inout String) -> ()){
    print("=8=> This func have inout argument")
    param(&valueforClosureInout)
}

 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 中有多少种编写闭包的方法? 的相关文章

  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • 如何将字符串日期转换为 NSDate?

    我想转换字符串 2014 07 15 06 55 14 198000 00 00 to an NSDate在斯威夫特 尝试这个 let dateFormatter NSDateFormatter dateFormatter dateForm
  • 错误域=AVFoundationErrorDomain代码=-11814“无法记录”

    它不断给我错误 错误域 AVFoundationErrorDomain代码 11814 无法记录 我不确定问题是什么 我试图在拍照后计数器达到 1 时录制声音 static int counter counter will always b
  • 所需框架与静态库

    构建现代框架 https developer apple com videos play wwdc2014 416 says 每个应用程序都有自己的自定义框架副本 https stackoverflow com a 15262463 242
  • Delphi - 如果没有创建类,为什么这个函数可以工作?

    考虑这个类 unit Unit2 interface type TTeste class private texto string public function soma a b integer string end implementa
  • 添加自定义过渡会导致 xib 加载错误的屏幕尺寸

    我正在尝试向具有 xib 的 UIViewController 添加自定义过渡 我尝试了几种方法 但它们都有相同的问题 视图显示的屏幕尺寸错误 我当前的示例基于以下教程 使用 Swift 在 iOS 中自定义 UIViewControlle
  • 为什么这个谓词格式会变成 '= nil'

    有人建议这个线程 https stackoverflow com questions 40686005 nspredicate crash after swift 3 migration与我的问题完全相同 但是 我的应用程序没有崩溃 并且我
  • 错误:更改核心数据模型后架构armv7的重复符号

    我有一个使用核心数据框架的应用程序 我工作得很好 我刚刚更改了数据模型 向一个实体添加一个属性 当我尝试构建它时 出现错误 duplicate symbol OBJC METACLASS AccountFolder in Users XXX
  • 个人帐户开发者之间的 Apple 开发/分发证书

    我一直在到处寻找有关处理证书的正确答案 想象一下以下帐户 Joe拥有个人 Apple 帐户 但他根本不会编码 他只是发布了该应用程序并将其称为自己的 Bob还有一个个人 Apple 帐户 Bob 是一位编码专家 Joe 付费让他开发他的第一
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 我怎样才能勾勒出文本字体?

    我想在边框 轮廓 中显示另一种颜色的文本 我正在尝试使用在 MapOverlayView 中显示文本 text drawAtPoint CGPointMake 0 30 withFont UIFont fontWithName Helvet
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged
  • 在故事板中的视图控制器之间滑动手势

    我希望添加左右滑动手势来在视图控制器之间进行更改 这是否可能 并且有没有一种简单的方法可以在故事板中执行此操作 谢谢 故事板允许您在两个视图控制器之间设置 Segues 我想说首先在视图之间附加 Segues 给它一个标识符 然后使用类似的
  • 创建新的保护子句

    在 Elixir 中 我将如何为函数创建新的保护子句 显然 我已经看到你不能只调用 a 中的任何函数when声明 但如果能够做这样的事情那就太好了 defmodule Player do def play card player do de

随机推荐

  • 在android上进行双向数据绑定的正确方法是什么?

    我为 2 路数据绑定做了一个简单的 hello world 并且接缝工作完美 当在 editext 上写入时 textview 自动更新 但是像官方文档一样在网上找到的所有代码都有更多的代码和复杂性 例如https developer an
  • 如何在 Windows 7 64 位上调试 VB6 IIS 应用程序

    我需要能够在 Windows 7 64 位上调试 Visual Basic 6 IIS 应用程序 不仅仅是为了解决一个问题 而是为了持续发展 尝试调试会导致 WebClass 运行时出现错误 发生了未指定的错误 如果我不进行调试而只是访问编
  • 对 Azure Cosmos DB 中的嵌套字段建立索引

    我想在 Azure Cosmos DB 文档中的嵌套字段上创建索引 例如 如果我有以下架构 id 1 nested mode mode1 text nice text 我想在该字段上创建索引nested mode 如何才能做到这一点 Ans
  • 如何在Eclipse控制台打印[简体]汉字?

    我有以下代码 import java io PrintStream import java io UnsupportedEncodingException import java util Locale public final class
  • 点击刷新时,IIS 上出现路由 404 错误

    我没有找到这个问题的解决方案 但我已经尝试了各种解决方案 但没有任何效果 我有一个 React JS 应用程序 当部署在测试服务器上并且您在页面上点击刷新时 我收到 404 错误消息 我尝试过 URL 重写 这有助于导航回主页 但这并不能解
  • 如何使 DateTime 独立于当前文化?

    我尝试将日期时间转换为字符串并返回 但使其适用于所有文化 我基本上有一个文本框 tbDateTime 和一个标签 lbDateTime 该标签告诉用户 软件期望以哪种格式输入 tbDateTime 文本框的输入将用于 MySQL 命令 目前
  • Angular ng 使用不同的“配置文件”构建

    在 Maven Java 中 可以构建具有不同 配置文件 的 Web 应用程序战争 配置文件 指示例如要放入配置文件中的 Web 服务的 URL 因此 测试配置文件 将指示与 生产配置文件 不同的 URL 有没有类似于 ng build 的
  • Swift - 如何在单击时使图像全屏显示,然后在再次单击时使图像变为原始大小? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于我正在制作的应用程序 我希望用户能够单击图像以使其在应用程序上全屏显示 然后用户可以单击现在的全屏图像以使其恢复原始大小 这可能吗
  • 我不明白 format() 和 ... (python) 之间有什么区别

    这里是困惑的新手 使用有什么区别 print So you are 0 years old format age AND print So you are age years old 两者都有效 其实差别很大 前者使用字符串format h
  • 汇编中的纯高位乘法?

    为了实现 0 到 1 之间的实数 通常使用 ANSI 浮点数或双精度数 但是 0 到 1 之间的固定精度数字 小数模 1 可以有效地实现为 32 位整数或 16 位字 它们像普通整数 字一样相加 但乘以 错误的方式 这意味着当您乘以 X 倍
  • gem 服务器:如何更新缺少 rdoc 的 gem?

    我很喜欢gem server使用本地 RubyGems 文档索引引导 Web 服务器的命令 我唯一的问题是 有些 gems 没有 rdoc 文件 如何添加缺失的rdoc 所有gem都是主流gem 不是我自己的 通过Bundler安装 导轨2
  • 电子生成器应用程序大小太大

    我发现使用 Electron builder 生成的 MyApp exe 文件有将近 500M 左右 我不确定我做了什么 因为以前 仅对于 ia32 或 x64 它大约是 196M 我也看了这个link https stackoverflo
  • 矢量上的段错误

    我创建了一个结构来保存一些数据 然后声明一个向量来保存该结构 但是当我执行 Push back 时 我遇到了该死的段错误 我不知道为什么 我的结构定义为 typedef struct Group int codigo string name
  • 查找最大值并显示 SQL Server 中不同字段的相应值

    我有一个表 其中包含有关城市的数据 其中包括城市名称 人口和与我的问题无关的其他字段 ID Name Population 1 A 45667 2 B 123456 3 C 3005 4 D 13769 找到最大人口是基本的 但我需要一个结
  • python 在 x 轴上旋转值以不重叠

    I m having some problems with the xticks of the graph here 有人可以帮忙吗 我尝试了他们在这里所做的事情 matplotlib 中的日期刻度和旋转 https stackoverfl
  • 如何设置 Facebook 分享图片(仅作为后备)?

    我们当然可以使用以下命令来设置默认共享图像 但是 有没有办法将其设置为仅后备 而不是默认值 这意味着 只有当 Facebook 无法从博客文章中找到更大 更合适的图像时才可以使用 注意 Facebook 已经自动自行抓取 无需网站所有者的任
  • tensorflow-gpu 无法与 Blas GEMM 一起使用 启动失败

    我安装了tensorflow gpu 以在GPU 上运行我的tensorflow 代码 但我无法让它运行 它不断给出上述错误 以下是我的示例代码 后面是错误堆栈跟踪 import tensorflow as tf import numpy
  • Django 不允许的主机

    我刚刚开始第一次接触 Django 所以我创建一个 django 项目并运行命令 python3 manage py runserver 0 0 0 0 8000 我没有得到预期的 django 主页 而是收到以下错误消息 Disallow
  • 未使用模板专业化

    我定义了以下函数 template
  • Swift 中有多少种编写闭包的方法?

    问题 在 swift 中编写任何闭包时需要考虑哪些基本规则和边界 就语法而言 闭包有多种类型 我们可以使用带有 void return 单参数返回和多返回类型的闭包 我们可以用inout typealaise escaping autocl