在块方法中提取自身属性

Extract self-properties in block-method

我在 Swift 中无法理解我的具体要求。 有一个名为 Origin 的 class 及其多个子class。 如何更新仅在 Origin class 中编写的块方法?

class Origin: NSObject {
    func mod(_ block: (() throws -> Void)) {
        try! block()
    } 
}

我需要使用来自所有Origin子class的mod,我需要有这样的使用效果:

var originSubclassObject = OriginSubclass() 
originSubclassObject.mod {
    .age = 12 //age is OriginSubclass property
    .name = "Bob" //name is OriginSubclass property
}

所以,你看,我需要提取 OriginSubclass 属性以便在 mod-block 中使用。我需要创建与使用效果代码完全相同的用法(从“.”中提取 mod-caller 属性)。 感谢大家的帮助!

您可以考虑使用默认实现的协议,例如:

protocol Modifiable { }

extension Modifiable {
    func mod(_ block: ((Self) throws -> Void)) {
        try! block(self)
    }
}

class Origin: Modifiable { }

class OriginSubclass: Origin {
    var name: String?
    var age: Int?
}

然后:

let originSubclassObject = OriginSubclass()
originSubclassObject.mod { object in
    object.age = 12
    object.name = "Bob"
}

let originSubclassObject = OriginSubclass()
originSubclassObject.mod {
    [=12=].age = 12
    [=12=].name = "Bob"
}

或者,如果该基数 class 仅用于 mod 方法,您可能会完全失去它:

protocol Modifiable { }

extension Modifiable {
    func mod(_ block: ((Self) throws -> Void)) {
        try! block(self)
    }
}

class MyObject: Modifiable {
    var name: String?
    var age: Int?
}

let myObject = MyObject()
myObject.mod { object in
    object.age = 12
    object.name = "Bob"
}

或者

let myObject = MyObject()
myObject.mod {
    [=15=].age = 12
    [=15=].name = "Bob"
}