Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 替换字符串列表中的字符_Swift_Swift3 - Fatal编程技术网

Swift 替换字符串列表中的字符

Swift 替换字符串列表中的字符,swift,swift3,Swift,Swift3,我已经按属性时间对列表中的对象进行了排序,属性时间不是字符串日期 排序前的样本输出: 07:05:10 AM 07:05:01 AM 07:04:49 AM 07:04:44 AM 06:53:58 AM 06:53:47 AM 01:03:21 AM 12:03:21 AM 调用指令后: self.myList = self.myList.sorted { $0.mytime < $1.mytime } 我是否可以将12:03:21 AM替换为00:03:21 AM,仅当它是AM和

我已经按属性时间对列表中的对象进行了排序,属性时间不是字符串日期

排序前的样本输出:

07:05:10 AM
07:05:01 AM
07:04:49 AM
07:04:44 AM 
06:53:58 AM
06:53:47 AM
01:03:21 AM
12:03:21 AM
调用指令后:

self.myList = self.myList.sorted { $0.mytime < $1.mytime }
我是否可以将12:03:21 AM替换为00:03:21 AM,仅当它是AM和12开始时

还是有不同的方法


提前谢谢

我想这就是你要找的。总是以这种方式比较日期

override func viewDidLoad() {
    super.viewDidLoad()
    var arrayOfDates = ["07:05:10 AM",
                        "07:05:01 AM",
                        "07:04:49 AM",
                        "07:04:44 AM",
                        "06:53:58 AM",
                        "06:53:47 AM",
                        "01:03:21 AM",
                        "12:03:21 AM"]

    // This will throw an error if any of your dates are 
    // misformatted, so handle that appropriately.                  
    arrayOfDates.sort() { $0.toDate()!.compare($1.toDate()!) == ComparisonResult.orderedDescending }
    print("Descending: \(arrayOfDates)")

    arrayOfDates.sort() { $0.toDate()!.compare($1.toDate()!) == ComparisonResult.orderedAscending }
    print("Ascending: \(arrayOfDates)")
}

extension String {
    func toDate() -> Date? {
    let formatter = DateFormatter()
    formatter.dateFormat = "hh:mm:ss a"
    if let date = formatter.date(from: self) {
        return date
    } else {
        return nil
    }
}

//If you need a string version of the date you can use this as well
extension Date {
    func toString() -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = "hh:mm:ss a"
        return formatter.string(from: self)
    }
}

这是一个XY问题。不应基于字符串表示法比较日期。将它们转换为日期或一些数字时间戳。12:03 AM和00:03 AM不是同一时间您没有正确排序。它应该首先根据am/pm进行排序,然后您可以根据前缀时间进行排序。我会先对日期排序,然后得到字符串later@CasperZandbergen:OP的意思可能是12:03 AM早于01:00 AM,因此她希望调整字符串以获得正确的比较。将所有字符串转换为24小时HH:MM:SS格式进行比较是另一种选择。您是否尝试编译该格式?谢谢!那正是我想要的。我在找这个。虽然我已经做了一个循环的解决方案,但它看起来很脏。我会继续你的实现:@MartinR不,我没有。。。。我凭记忆写的。有什么问题吗?它使用我每天使用的代码,所以如果有bug,它是很小的。@Sethmr:它不编译。你自己试试看。德比似乎已经能够弄明白这一点,但请随意找出我输入的错误并更正它。。。。哦,我错过了func LOL
override func viewDidLoad() {
    super.viewDidLoad()
    var arrayOfDates = ["07:05:10 AM",
                        "07:05:01 AM",
                        "07:04:49 AM",
                        "07:04:44 AM",
                        "06:53:58 AM",
                        "06:53:47 AM",
                        "01:03:21 AM",
                        "12:03:21 AM"]

    // This will throw an error if any of your dates are 
    // misformatted, so handle that appropriately.                  
    arrayOfDates.sort() { $0.toDate()!.compare($1.toDate()!) == ComparisonResult.orderedDescending }
    print("Descending: \(arrayOfDates)")

    arrayOfDates.sort() { $0.toDate()!.compare($1.toDate()!) == ComparisonResult.orderedAscending }
    print("Ascending: \(arrayOfDates)")
}

extension String {
    func toDate() -> Date? {
    let formatter = DateFormatter()
    formatter.dateFormat = "hh:mm:ss a"
    if let date = formatter.date(from: self) {
        return date
    } else {
        return nil
    }
}

//If you need a string version of the date you can use this as well
extension Date {
    func toString() -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = "hh:mm:ss a"
        return formatter.string(from: self)
    }
}