首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 中為 URL 追加查詢參數的標準寫法

     編輯:程式設計綜合問答

Java 參考代碼

if (resultStr.indexOf("commonsetsession.aspx") > 0) {
    if (originalResultStr.indexOf("?") < 0) {
        originalResultStr += "?" + deviceToken;
    } else {
        originalResultStr += "&" + deviceToken;
    }
}

iOS / Objective-C 實現

NSString *dealString = originalResultStr; // 原始 URL 字符串
NSString *deviceToken = @"token=abc123";  // 要追加的參數

if ([dealString rangeOfString:@"?"].location == NSNotFound) {
    // 無問號,首個參數用 ?
    dealString = [NSString stringWithFormat:@"%@?%@", dealString, deviceToken];
} else {
    // 已有參數,追加用 &
    dealString = [NSString stringWithFormat:@"%@&%@", dealString, deviceToken];
}

// dealString 即為拼接後的完整 URL

Swift 版本(現代項目首選)

var dealString = originalResultStr
let deviceToken = "token=abc123"

if !dealString.contains("?") {
    dealString += "?" + deviceToken
} else {
    dealString += "&" + deviceToken
}

// 更安全:使用 URLComponents 自動處理編碼
var components = URLComponents(string: dealString)!
let queryItem = URLQueryItem(name: "deviceToken", value: "abc123")
components.queryItems = (components.queryItems ?? []) + [queryItem]
let finalURL = components.url! // 自動處理 ? / & 及百分號編碼

關鍵點對比

語言判斷是否有問號拼接方式推薦做法
JavaindexOf("?") < 0字符串拼接手動拼接或 UriComponentsBuilder
OCrangeOfString:@"?"].location == NSNotFoundstringWithFormatNSURLComponents (iOS 7+)
Swiftcontains("?")字符串插值 / +URLComponents(自動編碼、結構化)

最佳實踐:永遠使用 URLComponents / NSURLComponents

  • 自動處理 ? / & 分隔符。
  • 自動對參數值進行 **URL 百分號編碼**(空格→%20,中文→%E4%B8%AD...)。
  • 避免手動拼接導致的編碼漏洞、雙重編碼、特殊字符截斷。

從 Java 遷移到 iOS 時,**拋棄字符串拼接,擁抱結構化 URL 構建器**,是寫出健壯網絡層代碼的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved