局部变量的类似属性的闭包

时间:2015-12-25 15:23:09

标签: ios swift closures

我没有在swiftbook中找到我的问题的答案。

这可以在swift中为局部变量创建类似属性的闭包吗?我的意思是smt就像进一步的片段一样:

 func someFunc() {
    // here goes our closure
    var myRect:CGRect {
        var x = 10
        var y = 20
        var width = 30
        var heigth = 40
    myRect = CGPointMake(x,y,width,heigth)
    }
}

我对UI元素位置进行了复杂性评估。这个技巧应该使我的代码更具可读性

2 个答案:

答案 0 :(得分:1)

这称为只读计算属性,您可以省略getter以简化声明:

var myRect: CGRect {
    let x:CGFloat = 10
    let y:CGFloat = 20
    let width:CGFloat = 30
    let height:CGFloat = 40
    return CGRectMake(x, y, width, height)
}
  

只读计算属性

     

具有getter但没有setter的计算属性称为a   只读计算属性。始终是只读计算属性   返回一个值,可以通过点语法访问,但不能   设置为不同的值。

     

请注意

     

您必须声明计算属性 - 包括只读计算   properties - 作为var关键字的变量属性,因为它们的   价值不固定。 let关键字仅用于常量   属性,表示一旦它们的值无法更改   被设置为实例初始化的一部分。

     

您可以通过简化只读计算属性的声明   删除get关键字及其大括号:

Documentation Swift Conceptual Properties

答案 1 :(得分:1)

为什么不尝试这种方式?

fun someFunc() {
    var myRect = {() -> CGRect in
        let x:CGFloat = 10.0
        let y:CGFloat = 20.0
        let width:CGFloat = 30.0
        let height:CGFloat = 40.0
        return CGRectMake(x,y,width,height)
       }

    myRect() //Call it
}

编辑我认为如果有一些要求来计算像maxElement那样的点位置,那么使用闭包可以保存一些小函数。