2017-09-23 9 views
1

私はSwiftの私の特定の要求を理解するのにいくつか問題があります。 Originクラスとそのサブクラスが複数存在するクラスがあります。 私のブロックメソッドはOriginクラスでのみ更新できますか?ブロックメソッドで自己特性を抽出します

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

は、私はすべての原点サブクラスからMODを使用する必要がある、と私は、この使用効果を持っている必要があります:

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

だから、あなたが見る、私はMOD-ブロック内で使用するためのOriginSubclassのプロパティを抽出する必要があります。私はusageエフェクトコードで使用法を正確に作成する必要があります( "。"からmod-callerプロパティを抽出します)。 ありがとうございました!

+0

あなたの質問は不明です。 – rmaddy

+0

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

答えて

0

あなたは例えば、デフォルトの実装とプロトコルを検討することもでき:

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" 
} 
関連する問題