在Swift 2.0中,使用属性setter作为选择器参数的正确语法是什么?



我试图将计算属性的setter作为选择器参数传递,我不确定Swift 2.0中的语法。

下面是我尝试过的一些示例代码:

class Baker: NSObject
{
    var cookie: String
    {
        get
        {
            print( "Returing ( _cookie ) cookie." )
            return _cookie
        }
        set
        {
            print( "Setting cookie to ( newValue )." )
            _cookie = newValue
        }
    }
    private var _cookie = "butterscotch"
    func delayedCookie()
    {
        self.performSelector( Selector( "cookie:" ), withObject: "vanilla", afterDelay: 0.0 )
        self.performSelector( Selector( "setCookie:" ), withObject: "peanutbutter", afterDelay: 0.0 )
    }
}
var baker = Baker()
baker.cookie = "chocolate"
baker.delayedCookie()
//  expected cookie to == "vanilla" or "peanutbutter"
baker.cookie
//  cookie == "chocolate"

对于计算属性"foo",正确的语法是Selector("setFoo:")。由于延迟而不是选择器参数的语法,测试代码在我的游乐场失败。

class Baker: NSObject
{
    var cookie: String
    {
        get
        {
            print( "Returing ( _cookie ) cookie." )
            return _cookie
        }
        set
        {
            print( "Setting cookie to ( newValue )." )
            _cookie = newValue
        }
    }
    private var _cookie = "butterscotch"
    func cookieFunction()
    {
        self.performSelector( Selector( "setCookie:" ), withObject: "peanutbutter" )
    }
}
var baker = Baker()
baker.cookie = "chocolate"
baker.cookieFunction()
baker.cookie
//  cookie == "peanutbutter" as expected.

最新更新