在块方法中提取自身属性

时间:2017-09-23 22:03:24

标签: swift properties block subclassing

我在Swift中理解我的具体请求时遇到了一些麻烦。 有一个名为Origin的类和多个子类。 如何更新我在Origin类中编写的块方法?

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

我需要使用所有Origin子类中的mod,我需要具有这种使用效果:

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

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

1 个答案:

答案 0 :(得分:0)

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

$set: { statusArray: newStatusArray}

然后:

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 { $0.age = 12 $0.name = "Bob" } 方法,则可能完全失去它:

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"
}