未初始化引用枚举类型对象及ApiRouter参数传递问题
解决你的两个Swift枚举与API路由问题
Hey there! Let's break down and fix your two issues with the ApiRouter enum and userType enum step by step:
问题1:「未初始化引用枚举类型对象」错误
这个报错根源在你ApiRouter的path计算属性里的.fetchJSON分支——你直接写了\(userType),但userType是一个枚举类型,不是已经初始化的具体枚举实例,编译器根本不知道你要引用哪个枚举值,所以抛出了这个错误。
你需要做的是在匹配.fetchJSON case时,提取它的关联值(也就是你传入的userType实例),再用这个实例的具体值来拼接路径。
问题2:在声明ApiRouter时传入用户类型的正确方式
其实你已经在ApiRouter里定义了case fetchJSON(type: userType),这意味着你完全可以直接写ApiRouter.fetchJSON(.admin)来创建实例——之前的报错大概率是问题1的代码错误引发的连锁问题。只要修正路径写法,这个用法就能正常工作。
修正后的完整代码
enum UserType: String { // 遵循Swift命名规范:类型名首字母大写 case admin = "Admin" case user = "User" } enum ApiRouter: APIConfiguration { case login(tckn: String, password: String) case fetchJSON(type: UserType) case token // MARK: - HTTP请求方法 var method: HTTPMethod { switch self { case .login: return .post case .fetchJSON, .token: return .get } } // MARK: - 请求路径 var path: String { switch self { case .login: return "/login" case .fetchJSON(let type): // 提取关联的UserType实例 return "/profile/\(type.rawValue)" // 使用实例的rawValue拼接路径 case .token: return "/posts/" } } }
关键修正点说明
- 命名规范调整:把
userType改成UserType,符合Swift大驼峰命名惯例,让代码更易读规范。 - 关联值提取:在
path的.fetchJSON分支里,用let type提取传入的UserType实例,这样就能拿到具体的枚举值了。 - 路径正确拼接:用
type.rawValue获取枚举对应的字符串值(比如.admin的rawValue是"Admin"),路径会正确生成为/profile/Admin或者/profile/User。
现在你可以正常创建ApiRouter实例了:
let adminApi = ApiRouter.fetchJSON(.admin) let userApi = ApiRouter.fetchJSON(.user)
内容的提问来源于stack exchange,提问作者Mr Some Dev.
相关产品推荐
相关产品推荐

