美文网首页KotlinKotlin编程
Kotlin:扩展函数妙用

Kotlin:扩展函数妙用

作者: 小城大麦 | 来源:发表于2016-03-08 17:10 被阅读913次

有一个访问Plist的Java类库com.dd.plist
使用扩展函数之前,访问属性必须这样写:

val pbxproj = PropertyListParser.parse("project.pbxproj") as NSDictionary
val rootGuid = (pbxproj.objectForKey("rootObject") as NSString).content
val objects:NSDictionary = pbxproj.objectForKey("objects") as NSDictionary
val targets = (objects.objectForKey(rootGuid) as NSDictionary).objectForKey("targets") as NSArray

as很多,级联访问字典数据也很麻烦。
使用函数扩展

fun <T> NSDictionary.getValue(key:String):T {
    return this.objectForKey(key) as T
}
//级联访问字典
fun NSDictionary.access(keys:List<String>): NSObject{
    println("keys = $keys")
    if(keys.size == 1) return getValue(keys[0])
    val o = this.getValue<NSDictionary>(keys[0])

    return o.access(keys.subList(1,keys.size))
}

fun <T> NSObject.to():T{
    return this as T
}

上面的代码可以优化为

     val rootGuid = pbxproj.getValue<NSString>("rootObject").content
    val objects:NSDictionary = pbxproj.getValue<NSDictionary>("objects")
    var rootObj = objects.getValue<NSDictionary>(rootGuid)
    val targets = rootObj.getValue<NSArray>("targets")
    val buildConfigListUUID = rootObj.getValue<NSString>("buildConfigurationList").content
    val buildConfigurations = objects.access(listOf(buildConfigListUUID,"buildConfigurations")) as NSArray
    for( bc in buildConfigurations.array){
        println("bc=${bc.to<NSString>().content}")
    }

相关文章

网友评论

    本文标题:Kotlin:扩展函数妙用

    本文链接:https://www.haomeiwen.com/subject/rhyzkttx.html