Swift可变参数函数简介

Home / iOS MrLee 2016-3-14 3046

这个可变参数的函数非常方便,效率也不错。不过貌似新手(2年左右)知道的人不多。不管是在C/C++,JAVA中都有这个,当然了,Swift也是如此,这样强大好用的功能怎么能缺少呢?
下面简单举例,因为比较简单,不像VC++中的valist有点小麻烦。上代码,自己看
    static func getUrl(api:String, string:String ...)->String! {
        var buf:String = String("http://")
        buf += server
        buf += "/api/"
        buf += api
        buf += "?"
        if (string.count % 2) != 0 {
            print("参数长度必须为2的倍数")
            return buf
        }
        for(var i=0;i<string.count;i+=2){
            buf += string[i]
            buf += "="
            buf += string[i+1]
            if(i != string.count-2){
                buf += "&"
            }
        }
        print(buf)
        return buf
    }

因为对Swift不太熟,所以不知道有没有和Java中的StringBuffer或者StringBuild类没,我是直接用字符串连接。
调用方式:
HttpFunction.getUrl("login", string: "user","ithtw","pwd","ithtw")

结果:
http://192.168.100.100/api/login?user=ithtw&pwd=ithtw

再来一个生成json格式的字符串函数
    static func genJson(string:String ...)->String! {
        var buf = String()
        if (string.count % 2) != 0 {
            print("参数长度必须为2的倍数")
            return buf
        }
        for(var i=0;i<string.count;i+=2){
            if i == 0 {
                buf += "{"
            }
            buf += """
            buf += string[i]
            buf += """
            buf += ":"
            buf += """
            buf += string[i+1]
            buf += """
            if(i != string.count-2){
                buf += ","
            }else if i == string.count-2 {
                buf += "}"
            }
        }
        return buf
    }


        let json = HttpFunction.genJson("name","ithtw","pwd","ithtw")
        print(json)

结果:
{"name":"ithtw","pwd":"ithtw"}

当然了,也可以用字典生成。还能是对应的类型,如String,Int,Bool,Double,Float……
这个自己简单改下就可以了。我这里字符串格式的已经够用了。
后记:发现Swift中有NSMutableString这个类,所以用这个连接。
    static func genJson(string:String ...)->String! {
        let buf = NSMutableString()
        if (string.count % 2) != 0 {
            print("参数长度必须为2的倍数")
            return buf as String
        }
        for(var i=0;i<string.count;i+=2){
            if i == 0 {
                buf.appendString("{")
            }
            buf.appendString(""")
            buf.appendString(string[i])
            buf.appendString(""")
            buf.appendString(":")
            buf.appendString(""")
            buf.appendString(string[i+1])
            buf.appendString(""")
            if(i != string.count-2){
                buf.appendString(",")
            }else if i == string.count-2 {
                buf.appendString("}")
            }
        }
        return buf as String
    }
    
    private static func genUrl(api:String, string:String ...)->String! {
        let buf = NSMutableString()
        buf.appendString("http://")
        buf.appendString(server)
        buf.appendString("/api/")
        buf.appendString(api)
        if (string.count % 2) != 0 {
            print("参数长度必须为2的倍数")
            return buf as String
        }
        for(var i=0;i<string.count;i+=2){
            if i == 0 {
                buf.appendString("?")
            }
            buf.appendString(string[i])
            buf.appendString("=")
            buf.appendString(string[i+1])
            if(i != string.count-2){
                buf.appendString("&")
            }
        }
        return buf as String
    }

本文链接:https://www.it72.com/8273.htm

推荐阅读
最新回复 (0)
返回