iOSが開発した分離URLのパラメータ

4851 ワード

開発中にページをジャンプするときにバックグラウンドから戻ってきたサイトを処理する必要がある場合があります.たとえば、特定のパラメータを抽出したり、削除したりします.文字列にこのパラメータが含まれているかどうかを直接判断すると、パラメータの長さは制御しにくい.そこで私はアルゴリズムを実現し、合法的なurl(最初のパラメータは「?」接続され、urlには「?」が1つしかありません.残りのパラメータは「&」接続)で文字列分割などの処理を行いurl中のパラメータの抽出を実現した.
アルゴリズムは以下の通りです.

/**

   url       



 @param urlString     url

 @return @[NSString:   url, NSDictionary:    ]

 */

+ (NSArray*)getParamsWithUrlString:(NSString*)urlString {

    if(urlString.length==0) {

        NSLog(@"    !");

        return @[@"",@{}];

    }



    //     

    NSArray*allElements = [urlStringcomponentsSeparatedByString:@"?"];

    NSMutableDictionary *params = [NSMutableDictionary dictionary];// set     



    if(allElements.count==2) {

        //     ?    

        NSString*myUrlString = allElements[0];

        NSString*paramsString = allElements[1];



        //     

        NSArray*paramsArray = [paramsStringcomponentsSeparatedByString:@"&"];



        if(paramsArray.count>=2) {



            for(NSIntegeri =0; i < paramsArray.count; i++) {



                NSString*singleParamString = paramsArray[i];

                NSArray*singleParamSet = [singleParamStringcomponentsSeparatedByString:@"="];



                if(singleParamSet.count==2) {

                    NSString*key = singleParamSet[0];

                    NSString*value = singleParamSet[1];



                    if(key.length>0|| value.length>0) {

                        [paramssetObject:value.length>0?value:@""forKey:key.length>0?key:@""];

                    }

                }

            }

        }elseif(paramsArray.count==1) {

            //  &。url  ?     

            NSString*singleParamString = paramsArray[0];

            NSArray*singleParamSet = [singleParamStringcomponentsSeparatedByString:@"="];



            if(singleParamSet.count==2) {

                NSString*key = singleParamSet[0];

                NSString*value = singleParamSet[1];



                if(key.length>0|| value.length>0) {

                    [paramssetObject:value.length>0?value:@""forKey:key.length>0?key:@""];

                }

            }else{

                //         xxxx?      

            }

        }



        //  url   

        return@[myUrlString,params];

    }elseif(allElements.count>2) {

        NSLog(@"     !      \"?\"");

        return @[@"",@{}];

    }else{

        NSLog(@"       !");

        return@[urlString,@{}];

    }



}


テストケース
NSString *str1 = @"https://www.jd.com/";
NSString *str2 = @"https://www.jd.com/?";
NSString *str3 = @"https://www.jd.com/?device=app";
NSString *str4 = @"https://www.jd.com/?device=app&appVersion=1.0.7&";
NSString *str5 = @"https://www.jd.com/?device=app&appVersion=1.0.7&platform=";
NSString *str6 = @"https://www.jd.com/?device=app&appVersion=&platform=iOS";
NSString *str7 = @"https://www.jd.com/?device=app&appVersion=1.0.7&platform=iOS";
    
NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str1]); NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str2]); NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str3]); NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str4]); NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str5]); NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str6]); NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str7]);

印刷結果
2018-02-02 09:56:53.316819+0800       [1572:274749]        !
2018-02-02 09:56:53.316978+0800       [1572:274749] (
    "https://www.jd.com/",
        {
    }
)
2018-02-02 09:56:53.317134+0800       [1572:274749] (
    "https://www.jd.com/",
        {
    }
)
2018-02-02 09:56:53.317329+0800       [1572:274749] (
    "https://www.jd.com/",
        {
        device = app;
    }
)
2018-02-02 09:56:53.317457+0800       [1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "1.0.7";
        device = app;
    }
)
2018-02-02 09:56:53.317586+0800       [1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "1.0.7";
        device = app;
        platform = "";
    }
)
2018-02-02 09:56:53.317690+0800       [1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "";
        device = app;
        platform = iOS;
    }
)
2018-02-02 09:56:53.317771+0800       [1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "1.0.7";
        device = app;
        platform = iOS;
    }
)