【问题标题】:Swift return value in settersetter 中的 Swift 返回值
【发布时间】:2017-04-17 06:05:52
【问题描述】:

我需要从 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
}

【问题讨论】:

  • setter 只设置值不返回。但是您可以在 example 方法中使用变量
  • 从逻辑上讲,你不能在setter返回一个值...
  • 为什么要从集合中返回任何值?它有什么用?

标签: swift swift3 return-value getter-setter


【解决方案1】:

不,很遗憾,你不能这样做,但如果你可以这样做,那将会非常混乱。

我们都知道闭包是 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 ""
}

无论如何,如果你真的可以这样做,你的代码将很难理解。作为您的代码的读者,人们会期望一个 return 语句来说明要准确返回的值。他们不期望一个

a = 0

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多