设置器中的Swift返回值

时间:2017-04-17 06:05:52

标签: swift swift3 return-value getter-setter

我需要从setter返回一个字符串,我该怎么做?这是代码:

func example()->String{ 
    var _a = 5
    var a: Int{
        set(newValue){
            _a = newValue
            if _a < 0{
                //return a string here!!
            }
        }get{
            return _a
        }
    }
    a = 0
}

1 个答案:

答案 0 :(得分:0)

不幸的是,你不能做到这一点,但如果无论如何能够做到这一点,那将会非常混乱。

我们都知道闭包是Swift中的一等公民,闭包可以嵌套。你在这里做的是将一个闭包放在另一个闭包中并试图从内部闭包中返回一个值。但是,即使可以嵌套闭包,两个不同的闭包也是两个不同的闭包。将嵌套闭包视为非嵌套闭包。当然你可以使用内部闭包中外部闭包的值:

func a(x: Int) {
     func b() {
         // use x here
     }
}

但是你可以用2个非嵌套的闭包来做。你要做的是通过从内部闭包返回一个值来使外部闭包返回:

func a() -> String {
    func b() {
        return ""
    }

    b()
}

使用2个非嵌套闭包是不可能的:

func a() -> String {
    b()
}

func b() {
    return ""
}

无论如何,如果你真的可以这样做,那将很难理解你的代码。作为代码的读者,人们会期望返回语句,该语句指出要准确返回的值。他们不指望

a = 0

返回东西。他们必须查看a的setter才能知道闭包将返回什么值。这在代码中有很多向上和向下看,这非常不方便。