ios – Swift传递封闭与Params

ios – Swift传递封闭与Params,第1张

概述目前我传递一个闭包作为一个对象的属性,该对象不接受参数并且没有返回值,如下所示: class MyClass { var myClosureProperty: (() -> ())? { didSet { doSomeActionWhenClosureIsSet() } }}var instanc 目前我传递一个闭包作为一个对象的属性,该对象不接受参数并且没有返回值,如下所示:
class MyClass {    var myClosureProperty: (() -> ())? {            dIDSet {                doSomeActionWhenClosureIsSet()            }    }}var instanceOfMyClass = MyClass()instanceOfMyClass.myClosureProperty = {    // do some things here...}

到目前为止,这工作得很好.我希望能够在设置此闭包时传入一个参数,以便在MyClass的实例中使用.我正在寻找下面的SOMETHING,虽然我确定语法不正确:

class MyClass {    var myClosureProperty: ((newString: String) -> ())? {            dIDSet {                doSomeActionWhenClosureIsSet(newString)            }    }    func doSomeActionWhenClosureIsSet(stringParam: String) -> () {        // create a button with the stringParam Title...    }}var instanceOfMyClass = MyClass()instanceOfMyClass.myClosureProperty = {("Action")    exampleFunction()}

我如何将参数传递给可以在MyClass中使用的闭包 – 即可以在属性本身的dIDSet部分内使用的值,如第二个示例中所示?

编辑:这是最终为我工作的东西:

class MyClass {        var myClosurePropertyWithStringAndAction: (buttonname: String,closure: (() -> ()))? {            dIDSet {                  let buttonTitle = myClosurePropertyWithStringAndAction!.buttonname                  createbuttonWithbuttonTitle(buttonTitle)            }         }        func createbuttonWithbuttonTitle(buttonTitle: String) -> () {             // here I create a button with the buttonTitle as the Title and set             // handlebuttonpressed as the action on the button        }        func handlebuttonpressed() {            self.myClosurePropertyWithStringAndAction?.closure()        }    }}

以下是我在实例上调用它的方式:

instaceOfMyClass.myClosurePropertyWithStringAndAction = ("Done",{    // do whatever I need to here})
解决方法 因为你试图设置第2个东西,一个闭包和一个按钮名称,你将无法通过一个简单的setter来完成闭包.

你有的约束是这两件事情是相互依赖的,所以你必须要么设置两者,要么都不设置.

首先,将newString添加到闭包中并不是按照你的想法做的.它是一个参数,因此您可以在调用它时将字符串传递给闭包,在定义闭包时,它不是传递字符串的方法.

做你想做的事的“快捷方式”可能是将它定义为一个元组.您可以在元组中命名值,以便它可以按您的需要工作.试试这样:

class MyClass {    var stringAndClosure: (buttonname: String,closure: (() -> ()))? {        dIDSet {            //create button named buttonname            let name = stringAndClosure!.buttonname        }    }}let instanceOfMyClass = MyClass()instanceOfMyClass.stringAndClosure =  ("Action",{ exampleFunction() })
总结

以上是内存溢出为你收集整理的ios – Swift传递封闭与Params全部内容,希望文章能够帮你解决ios – Swift传递封闭与Params所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1098815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存