在块方法中提取自身属性
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"
}
我在 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"
}