Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift setter中的快速返回值_Swift_Swift3_Return Value_Getter Setter - Fatal编程技术网

Swift setter中的快速返回值

Swift setter中的快速返回值,swift,swift3,return-value,getter-setter,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

我需要从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
}
func example()->String{
var_a=5
变量a:Int{
设置(新值){
_a=新值
如果a<0{
//在这里返回字符串!!
}
}得到{
返回a
}
}
a=0
}

不,不幸的是,你不能这么做,但如果你能这么做的话,那就太令人困惑了

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

func a(x: Int) {
     func b() {
         // use x here
     }
}
func a() -> String {
    func b() {
        return ""
    }

    b()
}
但这也是使用2个非嵌套闭包可以做到的。您试图做的是通过从内部闭包返回值使外部闭包返回:

func a(x: Int) {
     func b() {
         // use x here
     }
}
func a() -> String {
    func b() {
        return ""
    }

    b()
}
对于2个非嵌套闭包,这是不可能的:

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

func b() {
    return ""
}
不管怎样,如果你真的能做到这一点,你的代码就很难理解了。作为代码的读者,人们希望返回语句能够准确地说明返回的值。他们不期望有一个好的结果

a = 0

那是退货。他们必须查看
a
的setter,以了解闭包将返回什么值。这需要在代码中进行大量的上下查找,这非常不方便。

不,很遗憾,您不能这样做,但是如果您仍然可以这样做的话,它将非常混乱

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

func a(x: Int) {
     func b() {
         // use x here
     }
}
func a() -> String {
    func b() {
        return ""
    }

    b()
}
但这也是使用2个非嵌套闭包可以做到的。您试图做的是通过从内部闭包返回值使外部闭包返回:

func a(x: Int) {
     func b() {
         // use x here
     }
}
func a() -> String {
    func b() {
        return ""
    }

    b()
}
对于2个非嵌套闭包,这是不可能的:

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

func b() {
    return ""
}
不管怎样,如果你真的能做到这一点,你的代码就很难理解了。作为代码的读者,人们希望返回语句能够准确地说明返回的值。他们不期望有一个好的结果

a = 0

那是退货。他们必须查看
a
的setter,以了解闭包将返回什么值。这需要在代码中进行大量的上下查找,这非常不方便。

setter只设置值,不返回。但您可以在
示例中使用变量,从逻辑上讲,您不能在setter中返回值……为什么要从set中返回任何值?它有什么用?setter只设置值不返回。但您可以在
示例中使用变量,从逻辑上讲,您不能在setter中返回值……为什么要从set中返回任何值?它有什么用?