1

基本的に私はこのようなことをしたいと思っています。

public dynamic func someClass() -> AnyObject {
    return TyphoonDefinition.withClass(SomeClass.self) {
        (definition) in

        definition.useInitializer("initWithHost:") {
            (initializer) in

            let url: NSURL! = TyphoonConfig("someUrl") as NSURL
            initializer.injectParameterWith(url.host)
        }
    }
}

ただし、TyphoonConfig() は Type TyphoonInjectionByConfig からのものです。

TyphoonConfig オブジェクトを手動で変換することは可能ですか、それとも注入する必要があり、その後変換されますか?

4

1 に答える 1

1

TyphoonConfig を使用すると、.properties、.plist、または .json 形式の外部構成ファイルで構成を定義できます。これらの形式は限定された型を提供するため、Typhoon は文字列表現を必要な型に変換する組み込みの型コンバーターを提供します。組み込みのコンバーターは、プリミティブと、NSURL、UIColor などの一般的な型に対して存在します。独自に定義することもできます。

NSURL を外部化するには、構成を参照する定義を作成します。

/*
 * A config definition, referencing properties that will be loaded from a plist. 
 */
public dynamic func config() -> AnyObject {

    return TyphoonDefinition.configDefinitionWithName("Configuration.plist")
}

これを使って:

public dynamic func someClass() -> AnyObject {
    return TyphoonDefinition.withClass(SomeClass.self) {
        (definition) in

        definition.useInitializer("initWithHost:") {
            (initializer) in

            initializer.injectParameterWith(TyphoonConfig("someUrl"))
        }
    }
}

そして、次のように構成ファイルを作成します。

<plist version="1.0">
<dict>
    <key>someUrl</key>
    <string>NSURL(http://api.worldweatheronline.com/free/v2/weather.ashx)</string>
    <key>api.key</key>
    <string>dbaffee6eb10d4fdc1a5d333554e4</string>
    <key>days.to.retrieve</key>
    <string>NSNumber(5)</string>
</dict>
</plist>

値を として宣言していることに注意してください。これはNSURL(http://api.worldweatheronline.com/free/v2/weather.ashx)、Typhoon が NSURL を処理できるコンバーターのレジストリーを検索することを意味します。こちら で説明されているように、独自のコンバーターを登録することもできます。

于 2015-03-25T23:10:58.843 に答える