Swift中接收Date类型参数的函数调用需传入何种数据?
Swift中Date类型函数的调用问题
你写的howLongYouLive函数要求传入的是Swift标准库的Date类型实例,不能直接传入字符串或其他格式的日期值——Swift是强类型语言,参数类型必须严格匹配,这也是你尝试各类日期格式失败的原因。
以下是两种正确传参的方法:
方法1:用DateFormatter将字符串日期转为Date实例
如果你的原始日期是字符串格式(比如"1990-01-01"),可以通过日期格式化器转换:
func howLongYouLive(date: Date) -> Double { let currentDate = Date() return currentDate.timeIntervalSince(date) } // 1. 配置日期格式化器 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" // 必须和你的输入字符串格式完全匹配 dateFormatter.locale = Locale(identifier: "en_US_POSIX") // 避免本地化导致的解析错误 // 2. 将字符串转为Date实例 guard let birthDate = dateFormatter.date(from: "1990-01-01") else { fatalError("日期字符串格式与设置不匹配,无法解析") } // 3. 调用函数 let liveInterval = howLongYouLive(date: birthDate) print(liveInterval) // 输出从出生日期到当前时间的秒数
方法2:通过DateComponents创建指定日期的Date实例
如果知道具体的年月日等信息,可以直接构造日期组件生成Date:
func howLongYouLive(date: Date) -> Double { let currentDate = Date() return currentDate.timeIntervalSince(date) } // 1. 构造日期组件 var dateComponents = DateComponents() dateComponents.year = 1990 dateComponents.month = 1 dateComponents.day = 1 dateComponents.timeZone = TimeZone.current // 2. 生成Date实例 guard let birthDate = Calendar.current.date(from: dateComponents) else { fatalError("无法根据组件生成日期") } // 3. 调用函数 let liveInterval = howLongYouLive(date: birthDate)
内容的提问来源于stack exchange,提问作者Rayce Miller
相关产品推荐
相关产品推荐

