Swift 5.10带异常抛出的UserDefaults下标编译错误求助
Swift 带异常抛出的下标实现问题排查与解决
Swift支持带异常抛出的下标,但你的写法不符合语法规范,导致了编译错误。
编译错误信息
Expected '->' for subscript element type
Expected type
错误代码
import Foundation extension UserDefaults { private func setValue<E: Encodable>(_ object: E?, forKey key: String) throws { if object == nil { return removeObject(forKey: key) } let data = try JSONEncoder().encode(object) self.set(data, forKey: key) } private func object<D: Decodable>(forType type: D.Type, forKey key: String) throws -> D? { guard let data = self.data(forKey: key) else {return nil} return try JSONDecoder().decode(D.self, from: data) } public subscript<C: Codable>(key: String) (throws) -> C? { get { return try object(forType: C.self, forKey: key) } set { try setValue(newValue, forKey: key) } } }
问题根源
抛出型下标的语法错误,正确的写法是将throws放在get/set关键字之后,而非用括号包裹在返回类型前。原代码中(throws)的写法不符合Swift语法规范。
修正后的代码
import Foundation extension UserDefaults { private func setValue<E: Encodable>(_ object: E?, forKey key: String) throws { if object == nil { removeObject(forKey: key) return } let data = try JSONEncoder().encode(object) set(data, forKey: key) } private func object<D: Decodable>(forType type: D.Type, forKey key: String) throws -> D? { guard let data = data(forKey: key) else { return nil } return try JSONDecoder().decode(D.self, from: data) } // 修正抛出型下标的语法:将throws放在get/set关键字后 public subscript<C: Codable>(key: String) -> C? { get throws { return try object(forType: C.self, forKey: key) } set throws { try setValue(newValue, forKey: key) } } }
使用验证
你的预期使用代码可正常运行:
struct Person: Codable { var name: String var age: Int } // 存储Codable对象 let person = Person(name: "Alice", age: 30) do { try UserDefaults.standard["person"] = person } catch { print("Error storing person:", error) } // 读取Codable对象 do { if let storedPerson: Person = try UserDefaults.standard["person"] { print("Retrieved person:", storedPerson) } else { print("No person object found in UserDefaults") } } catch { print("Error retrieving person:", error) }
内容的提问来源于stack exchange,提问作者Manthan Gevariya
相关产品推荐
相关产品推荐

