Swift中数组下标的速记setter声明

在我的最后一个问题中,我询问了如何在Swift中为计算属性的下标编写setter。我认为我的问题还不足以理解。对于一个小任务,给出的答案要么不正确,要么很复杂。经过深思熟虑,我仍然认为也许一个聪明的人可以提供一个更加鼓舞人心的答案。

为了消除混乱,我的问题是Swift中是否存在数组下标的简写setter声明因为数组有速记setter声明,但没有下标。

一个速记的getter / setter声明

var center: Point {
    get {
        let centerX = origin.x + (size.width / 2)
        let centerY = origin.y + (size.height / 2)
        return Point(x: centerX, y: centerY)
    }
    set {
        origin.x = newValue.x - (size.width / 2)
        origin.y = newValue.y - (size.height / 2)
    }
}

基本上,在针对set动作action[i]将导致actionButton[i]更新的情况下。基本上有两种方法可以快速执行此操作。

第一个解决方案

func setActionAtIndex(index:Int, forValue newValue:SomeClass){
    action[index] = newValue
    self.updateActionButtonAtIndex(index)
}

上面的解决方案很容易理解,但是,它需要一个函数,该函数在一类中需要两行代码。不太“迅速”。

第二解决方案

var action: [SomeClass] {
    subscript(index:Int){
        set(index:Int,newValue:SomeClass){
           action[index] = newValue
           //extra action to be performed 
           updateActionButtonAtIndex(index)

        }
        get{
           return action[index]
        }
    }
}

不用说,这是绝对错误的,并且这种解决方案是不存在的

为什么错了

Expected 'get', 'set', 'willSet', or 'didSet' keyword to start an accessor definition

因此,是否存在类似于第二种解决方案但可行的解决方案

马特

我确实想过另一种方式,但是我不太喜欢。使用扩展名将另一个下标添加到setter数组中-允许您提供回调的setter。这种方法的问题在于您记得提供了回调!这给建立索引的人带来了责任,这可能与您的想法无关。尽管如此,它仍然具有简洁的优点-花费O(0)时间:

extension Array {
    subscript(ix:Int, f:(T,T,Int)->Void) -> T {
        set {
            let old = self[ix]
            self[ix] = newValue
            f(old,newValue,ix)
        }
        get {
            return self[ix]
        }
    }
}

class Thing {
    var arr : [Int] = [1, 2, 3]
    func f (oldv:Int, newv:Int, ix:Int) {
        println("changed \(oldv) to \(newv) at \(ix)")
    }
}

var t = Thing()
t.arr[1,t.f] = 100 // "changed 2 to 100 at 1"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift中数组下标的计算setter

来自分类Dev

带有下标的Swift类似数组类行为

来自分类Dev

Swift数组“对象”没有名为下标的成员

来自分类Dev

错误:下标的值不是内核中的数组,指针或向量

来自分类Dev

Swift数组下标索引编制中的错误?

来自分类Dev

在数组中插入数据时出错-数组下标的类型'int [int]'无效

来自分类Dev

多维数组c ++中数组下标的无效类型'int [int]'

来自分类Dev

错误:数组下标的类型无效

来自分类Dev

在Swift中下标的含糊使用

来自分类Dev

如何指定在Swift中强制执行下标的一般约束?

来自分类Dev

CSS填充速记声明中的反斜杠

来自分类Dev

awk数组下标的转换规则是什么?

来自分类Dev

编译错误-数组下标的类型'char [int]'无效

来自分类Dev

Swift中具有可选值的数组初始化器速记

来自分类Dev

Swift中的数组和字典类型声明

来自分类Dev

Swift的速记

来自分类Dev

“在下标的作业中不允许使用NA”

来自分类Dev

ggplot2中带有下标的X标签

来自分类Dev

Matlab中具有非标量下标的Accumarray?

来自分类Dev

“在下标的作业中不允许使用NA”

来自分类Dev

带有不同签名的Swift下标,用于getter和setter

来自分类Dev

C ++ 2D数组-数组下标的错误无效类型'int [int]'

来自分类Dev

带有字符数组的 C 警告:“警告:数组下标的类型为‘字符’”

来自分类Dev

尝试获取二维数组的列长度时,数组下标的类型“float[int]”无效

来自分类Dev

如何在Swift中声明多维布尔数组?

来自分类Dev

如何在Swift中声明和初始化数组

来自分类Dev

在Realm Swift中声明一个Int数组

来自分类Dev

包含数组下标的表达式是否可以是标识符?

来自分类Dev

Python:如何将字典转换为可下标的数组?

Related 相关文章

  1. 1

    Swift中数组下标的计算setter

  2. 2

    带有下标的Swift类似数组类行为

  3. 3

    Swift数组“对象”没有名为下标的成员

  4. 4

    错误:下标的值不是内核中的数组,指针或向量

  5. 5

    Swift数组下标索引编制中的错误?

  6. 6

    在数组中插入数据时出错-数组下标的类型'int [int]'无效

  7. 7

    多维数组c ++中数组下标的无效类型'int [int]'

  8. 8

    错误:数组下标的类型无效

  9. 9

    在Swift中下标的含糊使用

  10. 10

    如何指定在Swift中强制执行下标的一般约束?

  11. 11

    CSS填充速记声明中的反斜杠

  12. 12

    awk数组下标的转换规则是什么?

  13. 13

    编译错误-数组下标的类型'char [int]'无效

  14. 14

    Swift中具有可选值的数组初始化器速记

  15. 15

    Swift中的数组和字典类型声明

  16. 16

    Swift的速记

  17. 17

    “在下标的作业中不允许使用NA”

  18. 18

    ggplot2中带有下标的X标签

  19. 19

    Matlab中具有非标量下标的Accumarray?

  20. 20

    “在下标的作业中不允许使用NA”

  21. 21

    带有不同签名的Swift下标,用于getter和setter

  22. 22

    C ++ 2D数组-数组下标的错误无效类型'int [int]'

  23. 23

    带有字符数组的 C 警告:“警告:数组下标的类型为‘字符’”

  24. 24

    尝试获取二维数组的列长度时,数组下标的类型“float[int]”无效

  25. 25

    如何在Swift中声明多维布尔数组?

  26. 26

    如何在Swift中声明和初始化数组

  27. 27

    在Realm Swift中声明一个Int数组

  28. 28

    包含数组下标的表达式是否可以是标识符?

  29. 29

    Python:如何将字典转换为可下标的数组?

热门标签

归档