if (resultStr.indexOf("commonsetsession.aspx") > 0) {
if (originalResultStr.indexOf("?") < 0) {
originalResultStr += "?" + deviceToken;
} else {
originalResultStr += "&" + deviceToken;
}
}
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
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! // 自動處理 ? / & 及百分號編碼
| 語言 | 判斷是否有問號 | 拼接方式 | 推薦做法 |
|---|---|---|---|
| Java | indexOf("?") < 0 | 字符串拼接 | 手動拼接或 UriComponentsBuilder |
| OC | rangeOfString:@"?"].location == NSNotFound | stringWithFormat | NSURLComponents (iOS 7+) |
| Swift | contains("?") | 字符串插值 / + | URLComponents(自動編碼、結構化) |
? / & 分隔符。從 Java 遷移到 iOS 時,**拋棄字符串拼接,擁抱結構化 URL 構建器**,是寫出健壯網絡層代碼的關鍵。