What’s new in Swift

RSS for tag

Discuss the WWDC23 Session What’s new in Swift

View Session

Posts under wwdc2023-10164 tag

3 Posts
Sort by:
Post not yet marked as solved
2 Replies
913 Views
Hey all, I noticed a useful macro in the "What's new in Swift" WWDC2023 session called @CaseDetection. Seems like they used it in the presentation without defining it, so I assumed it was included in the Swift 5.9 installation? @CaseDetection is not a recognized attribute in my XCode 15 beta. Is that expected? Best, T
Posted
by taychap.
Last updated
.
Post not yet marked as solved
3 Replies
1.7k Views
Data equality checks have incorrectly changed on iOS 17. Step to reproduce: Run XCTestCase file in iOS 16. It will pass. Run XCTestCase file in iOS 17. It will fail. Suspected Cause: In iOS 17, Data has changed how it performs equality. Previously equality did not care about ordered keys, now it does. I've noticed if I modify the test case to use a JSONEncoder setting of encoder.outputFormatting = .sortedKeys, then it passes. Reason this is a bug: This is unexpected and changed behavior. Equality should not care what the ordering of the keys are when comparing one data object to another data object. Ordering is irrelevant for a JSON object. It's the content that matters. This will cause a huge regression for us in our previously released app if this hits production. XCTestCase: import XCTest final class JSONDecodingTest: XCTestCase { struct Address: Codable { let street: String let city: String let state: String let postalCode: String } struct OrderItem: Codable { let productID: String let productName: String let quantity: Int } struct Order: Codable { let orderID: String let totalAmount: Double let items: [OrderItem] } struct User: Codable { let id: Int let username: String let email: String let address: Address let orders: [Order] } struct RootObject: Codable { let user: User } func testData() throws { let object1Json: String = """ { "user": { "id": 12345, "username": "johndoe", "email": "john.doe@example.com", "address": { "street": "456 Elm St", "city": "Somewhere", "state": "NY", "postalCode": "54321" }, "orders": [ { "orderID": "A987", "totalAmount": 75.99, "items": [ { "productID": "P123", "productName": "Widget", "quantity": 2 }, { "productID": "P456", "productName": "Gizmo", "quantity": 1 } ] }, { "orderID": "B543", "totalAmount": 32.50, "items": [ { "productID": "P789", "productName": "Thingamajig", "quantity": 3 } ] } ] } } """ let encoder = JSONEncoder() encoder.outputFormatting = .sortedKeys let itemData = object1Json.data(using: .utf8)! let item = try JSONDecoder().decode(RootObject.self, from: itemData) let data1 = try encoder.encode(item) let data2 = try encoder.encode(item) XCTAssertTrue(data1 == data2) } } I've filed feedback here: https://feedbackassistant.apple.com/feedback/12995492 I noticed that in WWDC, Apple said they rewrote the entire JSONEncoder & JSONDecoder implementations. This is a massive regression: https://developer.apple.com/videos/play/wwdc2023/10164/
Posted
by sami.taha.
Last updated
.