请求成功后Controller中设置分页总页数变量失败问题
问题分析与解决
核心问题
你遇到的maxPages赋值后始终为nil的情况,大概率是类型不匹配导致的:服务器返回的totalPage字段值虽然是6,但实际类型并非Int,而是String(比如JSON里返回的是"6"而非数字6),直接用as? Int转换会失败,最终赋值为nil。
验证步骤
先在代码中添加打印,确认totalPages的实际类型:
let totalPages = data["totalPage"] print("totalPages 值:\(totalPages),类型:\(type(of: totalPages))")
如果打印结果显示类型为String,就能确认问题根源。
解决方案
根据实际类型做针对性转换:
- 如果是String类型:先转成String再转Int
if let totalPagesStr = totalPages as? String { self.maxPages = Int(totalPagesStr) }
- 兼容多种类型(更安全):同时处理String和Int/NSNumber的情况
if let totalPagesInt = totalPages as? Int { self.maxPages = totalPagesInt } else if let totalPagesStr = totalPages as? String { self.maxPages = Int(totalPagesStr) } else if let totalPagesNum = totalPages as? NSNumber { self.maxPages = totalPagesNum.intValue }
额外排查点
- 检查键名是否完全匹配:确认服务器返回的是
totalPage而非totalPages(注意单复数),不过你能拿到Optional(6),这一点大概率没问题。 - 确保回调在主线程执行:虽然其他变量赋值正常,但如果回调在后台线程,偶尔可能出现变量更新不及时的情况,可以强制在主线程赋值:
DispatchQueue.main.async { // 这里放maxPages的赋值代码 }
内容的提问来源于stack exchange,提问作者Zach Handley
相关产品推荐
相关产品推荐

