目前我传递一个闭包作为一个对象的属性,该对象不接受参数并且没有返回值,如下所示: 
  
  
 
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() })