diff --git a/Sources/FoundationEssentials/URL/URLComponents.swift b/Sources/FoundationEssentials/URL/URLComponents.swift index e45e863c4..f5ce53ae7 100644 --- a/Sources/FoundationEssentials/URL/URLComponents.swift +++ b/Sources/FoundationEssentials/URL/URLComponents.swift @@ -1141,15 +1141,19 @@ extension URLComponents: ReferenceConvertible, _ObjectiveCBridgeable { } public static func _conditionallyBridgeFromObjectiveC(_ x: NSURLComponents, result: inout URLComponents?) -> Bool { + if let swiftComp = x as? _NSSwiftURLComponents { + result = swiftComp.components + return true + } var comp = URLComponents() comp.scheme = x.scheme - comp.user = x.user - comp.password = x.password - comp.host = x.host + comp.percentEncodedUser = x.percentEncodedUser + comp.percentEncodedPassword = x.percentEncodedPassword + comp.encodedHost = x.encodedHost comp.port = x.port?.intValue - comp.path = x.path ?? "" - comp.query = x.query - comp.fragment = x.fragment + comp.percentEncodedPath = x.percentEncodedPath ?? "" + comp.percentEncodedQuery = x.percentEncodedQuery + comp.percentEncodedFragment = x.percentEncodedFragment result = comp return true } diff --git a/Tests/FoundationEssentialsTests/URLTests.swift b/Tests/FoundationEssentialsTests/URLTests.swift index a1f7c6b49..a85b850ce 100644 --- a/Tests/FoundationEssentialsTests/URLTests.swift +++ b/Tests/FoundationEssentialsTests/URLTests.swift @@ -1031,4 +1031,20 @@ final class URLTests : XCTestCase { XCTAssertEqual(comp.percentEncodedPath, "/my%00path") XCTAssertEqual(comp.path, "/my\u{0}path") } + +#if FOUNDATION_FRAMEWORK + func testURLComponentsBridging() { + var nsURLComponents = NSURLComponents( + string: "https://example.com?url=https%3A%2F%2Fapple.com" + )! + var urlComponents = nsURLComponents as URLComponents + XCTAssertEqual(urlComponents.string, nsURLComponents.string) + + urlComponents = URLComponents( + string: "https://example.com?url=https%3A%2F%2Fapple.com" + )! + nsURLComponents = urlComponents as NSURLComponents + XCTAssertEqual(urlComponents.string, nsURLComponents.string) + } +#endif }