如何安全地在字典中强制展开时间
How to safely force unwrap time in dictionary
我有一个问题。我有一个字典类型 [String: Any]
我的有效代码是
dict["start"] = "\(start.hour!):\(start.minute!)"
if let end = end {
dict["end"] = "\(end.hour!):\(end.minute!)"
}
但是当我使用 swiftlint 时,它会抛出一个强制展开错误。必须保存值,所以如果 let 在这里不好 :)
这主要是语义问题,但您可以这样做:
if let startHour = start.hour,
let startMinute = start.minute {
dict["start"] = "\(startHour):\(startMinute)"
if let end = end,
let endHour = end.hour,
let endMinute = end.minute {
dict["end"] = "\(endHour):\(endMinute)"
}
}
...或类似的东西——因为 Swift 中有多种方法可以安全地解包一个可选的。
您可以试试下面的演示代码。希望对你有所帮助。
import Foundation
let calendar = Calendar.current
let dateComponents = DateComponents(hour: 12, minute: 20, second: 55)
func getHoursMinutesFrom(time: DateComponents) -> (hour: Int,minute: Int) {
switch (time.hour, time.minute) {
case let (.some(hour), .some(minutes)):
return (hour,minutes)
default:
return (0,0)
}
}
print(getHoursMinutesFrom(time: dateComponents))
我有一个问题。我有一个字典类型 [String: Any]
我的有效代码是
dict["start"] = "\(start.hour!):\(start.minute!)"
if let end = end {
dict["end"] = "\(end.hour!):\(end.minute!)"
}
但是当我使用 swiftlint 时,它会抛出一个强制展开错误。必须保存值,所以如果 let 在这里不好 :)
这主要是语义问题,但您可以这样做:
if let startHour = start.hour,
let startMinute = start.minute {
dict["start"] = "\(startHour):\(startMinute)"
if let end = end,
let endHour = end.hour,
let endMinute = end.minute {
dict["end"] = "\(endHour):\(endMinute)"
}
}
...或类似的东西——因为 Swift 中有多种方法可以安全地解包一个可选的。
您可以试试下面的演示代码。希望对你有所帮助。
import Foundation
let calendar = Calendar.current
let dateComponents = DateComponents(hour: 12, minute: 20, second: 55)
func getHoursMinutesFrom(time: DateComponents) -> (hour: Int,minute: Int) {
switch (time.hour, time.minute) {
case let (.some(hour), .some(minutes)):
return (hour,minutes)
default:
return (0,0)
}
}
print(getHoursMinutesFrom(time: dateComponents))