2

を使用する場合、値にパーセントでエンコードされた文字が含まれるクエリ項目がある場合、私の場合はURLComponentsとしてエンコードされている場合、そのようなクエリ項目を含む URLからオブジェクトを構築すると、オブジェクトのクエリ アイテムのリストの場合、オブジェクトを呼び出してを取得しようとすると、クエリ アイテムのパーセント エンコーディングが失われます。queryItems/%2FURLComponentsStringURLComponentsURL.urlURLComponents

遊び場でこれをテストしてきたコードは次のとおりです。

import UIKit

// --- Part 1 ---
print("--- Part 1 ---\n")

let startURL = "https://test.com/test.jpg?X-Test-Token=FQdzEPH%2F%2F%2F"
var components = URLComponents(string: startURL)!

if let compURL = components.url {
    print(URL(string: startURL)! == compURL) // True
    print(startURL)
    print(compURL)
}

// --- Part 2 ---
print("\n--- Part 2 ---\n")

let startURLTwo = "https://test.com/test.jpg?X-Test-Token=FQdzEPH%2F%2F%2F"
let finalURL = "https://test.com/test.jpg?X-Test-Token=FQdzEPH%2F%2F%2F&foo=bar"
var componentsTwo = URLComponents(string: startURLTwo)!

let extraQueryItem = URLQueryItem(name: "foo", value: "bar")
componentsTwo.queryItems!.append(extraQueryItem)

if let compURLTwo = componentsTwo.url {
    print(URL(string: finalURL)! == compURLTwo) // False
    print(finalURL)
    print(compURLTwo)
}

何が起こっているのかを理解しやすくするための画像を次に示します。

ここに画像の説明を入力

4

2 に答える 2