2017-08-12 13 views
0

Logに基づいて自分のプロジェクトで使用するログクラスを書き込んでいます。 Logジェネリッククラスのenum値を使用するにはどうすればいいですか

は、ログメソッドは、すべてが正常に動作しますが、私は、コードがあまりにも繰り返しであることがわかりましたし、ジェネリックTタイプを使用して、単一の方法でそれを置き換えるしたいと思いますので、

open func trace(_ items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) { 
    log(.trace, items, separator, terminator, file, line, column, function) 
} 

open func debug(_ items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) { 
    log(.debug, items, separator, terminator, file, line, column, function) 
} 

open func info(_ items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) { 
    log(.info, items, separator, terminator, file, line, column, function) 
} 

open func warning(_ items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) { 
    log(.warning, items, separator, terminator, file, line, column, function) 
} 

open func error(_ items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) { 
    log(.error, items, separator, terminator, file, line, column, function) 
} 

これらのように呼ばれています

open func log<T: Level>(_ items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) { 
    log(T, items, separator, terminator, file, line, column, function) 
} 

私が作ってみた方法は

class public func log<T: LogLevelGeneric>(_ items: Any..., separator: String = "", _ file: String = #file, _ line: Int = #line, _ function: String = #function, t:T) { 
     // Error: Inheritance from non-protocol, non-class type LogLevelGeneric 

} 


public enum LogLevelGeneric: String { 
    case pretty = "Prettify" 
    case measure = "Measure " 
    case verbose = "Verbose " 
    case info = "Info " 
    case warning = "Warning " 
    case debug = "Debug " 
    case error = "❤️️Error " 
} 
です

私は何をしようとすることができます達成することができ、それはできませんが、今まで私はそれができないことを証明したことがわかった。

誰かがこれをどのように正しい方向に向けることができますか?ありがとう。

+2

のためのパラメータとしてのレベルを渡す、汎用的な機能を必要としません。 – ryantxr

答えて

3

エラーメッセージには、総称制約として列挙を使用できないというメッセージが表示されます。

実際に、あなたはあなただけの関数のパラメータとして列挙型を渡すことができます例

class public func log(level: LogLevelGeneric, items: Any..., separator: String = "", _ file: String = #file, _ line: Int = #line, _ function: String = #function) { 


} 
+0

doh!私はダブ、私はジェネリックについて学ぶことにとても集中していました。ありがとう! – highboi

関連する問題