在块方法中提取自我属性

问题描述:

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

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

我需要使用国防部所有产地的子类,我需要有这样的使用效果:

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

所以,你看,我需要使用模块提取OriginSubclass性能。我需要在使用效果代码中精确地创建使用情况(从“。”中提取mod-caller属性)。 谢谢大家的帮助!

+0

你的问题还不清楚。 – rmaddy

+0

比较https://stackoverflow.com/a/42356615/2976878 – Hamish

你可以考虑使用一个默认实现的协议,如:

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

或者

let myObject = MyObject() 
myObject.mod { 
    $0.age = 12 
    $0.name = "Bob" 
}