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

如何在Xcode14.1+Swift中修复Date无years成员的错误?

问题修复方案

核心问题原因

Swift 标准库的 Date 类并没有内置 years(from:) 方法,你复刻的原项目应该是自定义了 Date 的扩展来实现这个功能,但你没有将该扩展引入到自己的项目中,所以才会报错。

解决步骤

1. 添加Date扩展实现年龄计算

创建一个新的Swift文件(比如命名为 Date+AgeCalculation.swift),将以下代码粘贴进去:

import Foundation

extension Date {
    func years(from birthDate: Date) -> Int {
        let calendar = Calendar.current
        let ageComponents = calendar.dateComponents([.year], from: birthDate, to: self)
        return ageComponents.year ?? 0
    }
}

这个扩展利用系统的Calendar类计算两个日期的年份差,能自动处理闰年、不同月份天数差异等问题,比直接计算时间间隔更准确。

2. 验证现有调用代码

添加扩展后,你FirestoreUser和MatchModel里的age计算属性可以正常使用,无需修改原有调用逻辑:

// FirestoreUser中的age属性
var age: Int {
    Date().years(from: birthDate)
}

// MatchModel中的age属性
var age: Int{
    Date().years(from: birthDate)
}

3. 修复潜在编码错误

注意到你FirestoreUser的CodingKeys里,pictures对应的键写成了picturesv,这会导致从Firestore解码时无法正确读取pictures字段,建议修正:

enum CodingKeys: String, CodingKey {
    case id
    case name
    case birthDate
    case bio
    case isMale = "male"
    case orientation
    case pictures // 修正为正确的字段名
    case liked
    case passed
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:55:17