Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Ios 局部变量的类属性闭包_Ios_Swift_Closures - Fatal编程技术网

Ios 局部变量的类属性闭包

Ios 局部变量的类属性闭包,ios,swift,closures,Ios,Swift,Closures,我在速记中找不到我问题的答案 这是否可以在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,widt

我在速记中找不到我问题的答案

这是否可以在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元素的位置进行了复杂性评估。这个技巧应该使我的代码更具可读性

这称为只读计算属性,您可以省略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的计算属性称为 只读计算属性。只读计算属性始终为空 返回一个值,可以通过点语法访问,但不能 设置为不同的值

必须声明计算属性,包括只读计算属性 属性作为带有var关键字的变量属性,因为 这个值不是固定的。let关键字仅用于常量 属性,以指示它们的值一旦更改就无法更改 设置为实例初始化的一部分

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

为什么不试试这种方法

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
使用闭包可以保存一些小函数。

它的目的是什么?这只是额外的代码,没有任何好处!如果你的一个方法变大了,就创建实用函数。好吧,我可以完全避免使用local属性来设置UIView的框架。谢谢你的回答我认为如果需要计算很多位置,这种方法可以减少一些小功能,但是对于这个问题的例子来说,似乎没有必要这样做。Leo是第一个,他的回答离问题稍微近一点。我必须给他打那个分数。对不起。不管怎样,我把你的答案投了更高的票,因为它不适合我的情况。我有很多视图,我不能存储所有的CGRect Ineed@O.G.O我想你不知道怎么用它。它的工作原理与另一个答案完全相同,你只需要在没有()的情况下调用它。我做了一些实验,你完全正确。我应该改变正确的答案,因为你是第一个。对不起,误会了