手动转换 TyphoonConfig
Manually convert TyphoonConfig
基本上我想做这样的事情。
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 对象,还是需要注入它然后转换?
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 的转换器。您还可以注册自己的转换器,如 here 所述。
基本上我想做这样的事情。
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 对象,还是需要注入它然后转换?
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 的转换器。您还可以注册自己的转换器,如 here 所述。