You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift项目中JSON日期解析失败及SSL_ERROR_ZERO_RETURN问题求助

解决方案:Swift项目中日期解析失败与SSL错误修复

我来帮你逐个解决这两个问题:


问题1:Date类型数据无法解析(datereg始终为nil)

看了你的代码和日志输出,核心有两个问题导致日期字段解析失败:

1. 结构体属性名与JSON键名不匹配

你的Client结构体里日期属性叫datareg,但服务器返回的JSON里对应的键是datereg(少了一个a)!Codable默认会严格匹配属性名和JSON键名,这直接导致解码器找不到对应值,最终datareg为nil。

修复方法:
给结构体添加CodingKeys来映射键名,这样不用修改属性名也能正确解析:

struct Client: Codable {
    let id: String?
    let name: String?
    let phone: String?
    let company: String?
    let discount: String?
    var datareg: Date?

    // 手动映射JSON键与属性名
    enum CodingKeys: String, CodingKey {
        case id, name, phone, company, discount
        case datareg = "datereg" // 把JSON里的"datereg"映射到属性datareg
    }
}

2. 日期格式化器缺少关键配置

不管用SwiftyJSON还是JSONDecoder,你的日期格式化器都没设置时区和locale,这会导致跨时区的日期字符串解析失败。

修复SwiftyJSON的Formatter:
修改Formatter类,给两个格式化器添加上时区和locale:

class Formatter {
    static let jsonDateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"
        formatter.timeZone = TimeZone(abbreviation: "UTC")
        formatter.locale = Locale(identifier: "en_US_POSIX")
        return formatter
    }()
    
    static let jsonDateTimeFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        formatter.timeZone = TimeZone(abbreviation: "UTC")
        formatter.locale = Locale(identifier: "en_US_POSIX")
        return formatter
    }()
}

JSONDecoder的配置:
你当前的JSONDecoder配置是正确的,只要配合上面的CodingKeys修复,就能正常解析日期字段了。


问题2:SSL_ERROR_ZERO_RETURN(6)错误

这个错误表示SSL连接被服务器主动关闭,常见原因和解决方法如下:

  • 服务器证书不被信任:如果你的服务器用的是自签名证书,iOS默认会拒绝连接。测试阶段可以在Info.plist里添加临时配置允许不安全连接(上线必须替换为正规CA颁发的证书):

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    
  • 服务器SSL协议版本过低:部分旧服务器只支持TLS 1.0/1.1,而iOS默认要求TLS 1.2+。可以在Info.plist里给目标域名添加例外:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>sverlim.software</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.0</string>
            </dict>
        </dict>
    </dict>
    
  • 服务器端配置问题:比如连接超时设置过短、服务器负载过高导致主动断开,这种情况需要联系服务器管理员排查。


内容的提问来源于stack exchange,提问作者Anton Zhevchenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:30