2017-11-03 10 views
0

私はここで間違っていますか?すべてがうまく見えます。関数のシグネチャは正しい。私はparentが特別な議論になる理由はないと思う。余分な引数、便利な初期設定子

import CloudKit 
import CoreLocation 

public enum OrderDirection { 
    case ascending, descending 
} 

open class OrderBy { 
    var key: String = "" 
    var direction: OrderDirection = .descending 
    var parent: OrderBy? = nil 

    open var sortDescriptor: NSSortDescriptor { 
     return NSSortDescriptor(key: self.key, ascending: self.direction == .ascending) 
    } 

    public convenience init(key: String, direction: OrderDirection, parent: OrderBy? = nil) { 
     self.init() 
     self.key = key 
     self.direction = direction 
     self.parent = parent 
    } 

    open func Ascending(_ key: String) -> Ascending { 
     return Ascending(key, parent: self) 
    } 

    open func Descending(_ key: String) -> Descending { 
     return Descending(key, parent: self) 
    } 

    open var sortDescriptors: [NSSortDescriptor] { 
     return self.parent?.sortDescriptors ?? [] + [self.sortDescriptor] 
    } 
} 

open class Ascending: OrderBy { 
    public convenience required init(key: String, parent: OrderBy? = nil) { 
     self.init(key: key, direction: .ascending, parent: parent) 
    } 
} 

open class Descending: OrderBy { 
    public convenience required init(key: String, parent: OrderBy? = nil) { 
     self.init(key: key, direction: .descending, parent: parent) 
    } 
} 

EDITは:実際のコードのスクリーンショット切り替え。

+0

「昇順」メソッド名やクラス名ではなく、良いアイデア... –

+0

@MartinR謝罪の両方です。私はそれを修正します。 – user1563544

答えて

1

関数が自分自身を呼び出そうとしているように見えるため、昇順/降順クラスのinitにはparentパラメータが存在しません。私は、関数の名前を変更して、使用したい関数をデバッガに明確にすることをお勧めします。最初の文字を小文字に変更するだけで十分です。

同じスコープの場合、同じ問題が発生するとは思われません。

0

メソッド名は小文字で始まります!

修正:

open func ascending(_ key: String) -> Ascending { 
    return Ascending(key: key, parent: self) 
} 

open func descending(_ key: String) -> Descending { 
    return Descending(key: key, parent: self) 
} 
関連する問題