在块方法中提取自我属性
问题描述:
在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属性)。 谢谢大家的帮助!
答
你可以考虑使用一个默认实现的协议,如:
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"
}
你的问题还不清楚。 – rmaddy
比较https://stackoverflow.com/a/42356615/2976878 – Hamish