bee*_*eef 87 beta xcode ios swift3
我正在将我的应用程序更新为Swift 3.0语法(我知道它仍处于测试阶段,但我想在发布后立即做好准备).
直到之前的Xcode Beta(Beta 5),我能够Date
使用操作数比较两个对象<
,>
并且==
.但在最新的测试版(Beta 6)中,这已不再适用了.以下是一些截图:
正如您在两个屏幕截图中看到的,这些是两个Date
对象.但是我收到以下错误:
我究竟做错了什么?这些函数仍然在Date
类中声明:
static func >(Date, Date)
如果左手Date比右手Date更晚,则返回true.
这只是一个Beta bug还是我做错了什么?
Ank*_*kur 153
我试过这个片段(在XCode 8 Beta 6中),它运行正常.
let date1 = Date()
let date2 = Date().addingTimeInterval(100)
if date1 == date2 { ... }
else if date1 > date2 { ... }
else if date1 < date2 { ... }
Run Code Online (Sandbox Code Playgroud)
Mob*_*Dan 49
Date
是Comparable
&Equatable
(截至Swift 3)这个答案补充了@Ankit Thakur的答案.
从Swift 3开始,Date
struct(基于底层NSDate
类)采用Comparable
和Equatable
协议.
Comparable
需要Date
实现运营商:<
,<=
,>
,>=
.Equatable
要求Date
实施==
运营商.Equatable
允许Date
使用!=
运算符的默认实现(这是Equatable
==
运算符实现的反转).以下示例代码练习这些比较运算符,并确认哪些比较对于print
语句是正确的.
import Foundation
func describeComparison(date1: Date, date2: Date) -> String {
var descriptionArray: [String] = []
if date1 < date2 {
descriptionArray.append("date1 < date2")
}
if date1 <= date2 {
descriptionArray.append("date1 <= date2")
}
if date1 > date2 {
descriptionArray.append("date1 > date2")
}
if date1 >= date2 {
descriptionArray.append("date1 >= date2")
}
if date1 == date2 {
descriptionArray.append("date1 == date2")
}
if date1 != date2 {
descriptionArray.append("date1 != date2")
}
return descriptionArray.joined(separator: ", ")
}
Run Code Online (Sandbox Code Playgroud)
let now = Date()
describeComparison(date1: now, date2: now.addingTimeInterval(1))
// date1 < date2, date1 <= date2, date1 != date2
describeComparison(date1: now, date2: now.addingTimeInterval(-1))
// date1 > date2, date1 >= date2, date1 != date2
describeComparison(date1: now, date2: now)
// date1 <= date2, date1 >= date2, date1 == date2
Run Code Online (Sandbox Code Playgroud)
Suh*_*til 28
从Swift 3及以上版本开始,Date是可比的,所以我们可以直接比较日期
let date1 = Date()
let date2 = Date()
let isGreater = date1 > date2
print(isGreater)
let isSmaller = date1 < date2
print(isSmaller)
let isEqual = date1 == date2
print(isEqual)
Run Code Online (Sandbox Code Playgroud)
或者我们可以在日期创建扩展
extension Date {
func isEqualTo(_ date: Date) -> Bool {
return self == date
}
func isGreaterThan(_ date: Date) -> Bool {
return self > date
}
func isSmallerThan(_ date: Date) -> Bool {
return self < date
}
}
Run Code Online (Sandbox Code Playgroud)
使用: let isEqual = date1.isEqualTo(date2)
小智 14
看看 http://iswift.org/cookbook/compare-2-dates
获取日期:
// Get current date
let dateA = NSDate()
// Get a later date (after a couple of milliseconds)
let dateB = NSDate()
Run Code Online (Sandbox Code Playgroud)
使用SWITCH语句
// Compare them
switch dateA.compare(dateB) {
case .OrderedAscending : print("Date A is earlier than date B")
case .OrderedDescending : print("Date A is later than date B")
case .OrderedSame : print("The two dates are the same")
}
Run Code Online (Sandbox Code Playgroud)
使用IF声明
if dateA.compare(dateB) == .orderedAscending {
datePickerTo.date = datePicker.date
}
//OR
if case .orderedAcending = dateA.compare(dateB) {
}
Run Code Online (Sandbox Code Playgroud)
例如,如果您想忽略秒,则可以使用
func isDate(Date, equalTo: Date, toUnitGranularity: NSCalendar.Unit) -> Bool
示例比较是否是同一天:
Calendar.current.isDate(date1, equalTo: date2, toGranularity: .day)
Run Code Online (Sandbox Code Playgroud)
小智 6
SWIFT 3:不知道这是否是您正在寻找的.但我将字符串与当前时间戳进行比较,以查看我的字符串现在是否更旧.
func checkTimeStamp(date: String!) -> Bool {
let dateFormatter: DateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.locale = Locale(identifier:"en_US_POSIX")
let datecomponents = dateFormatter.date(from: date)
let now = Date()
if (datecomponents! >= now) {
return true
} else {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
要使用它:
if (checkTimeStamp(date:"2016-11-21 12:00:00") == false) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
只比较日期和年月日,没有时间对我来说是这样的:
let order = Calendar.current.compare(self.startDate, to: compareDate!, toGranularity: .day)
switch order {
case .orderedAscending:
print("\(gpsDate) is after \(self.startDate)")
case .orderedDescending:
print("\(gpsDate) is before \(self.startDate)")
default:
print("\(gpsDate) is the same as \(self.startDate)")
}
Run Code Online (Sandbox Code Playgroud)