如何在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
相关产品推荐
相关产品推荐

