【问题标题】:Objective C to Swift dispatch processObjective C 到 Swift 调度过程
【发布时间】:2016-06-29 14:53:54
【问题描述】:

我在将 Objective C 中的以下代码转换为 Swift 时遇到了一些麻烦:

- (BOOL)loadEventsAtDate:(NSDate*)date
{

    dispatch_async(self.bgQueue, ^{
        [self bg_loadOneDay];
    });

    return YES;
}

- (void)bg_loadOneDay
{
    __block NSDate *date;

    dispatch_sync(dispatch_get_main_queue(), ^{
       .....
    });

    if (date) {
        [self bg_loadEventsAtDate:date];
    }
}

- (void)bg_loadEventsAtDate:(NSDate*)date
{
    dispatch_async(dispatch_get_main_queue(), ^{
    ......
    });
}

你能帮帮我吗?我对此很陌生!!!提前谢谢你!!!

【问题讨论】:

    标签: objective-c swift dispatch


    【解决方案1】:

    试试这个:

    func loadEventsAtDate(date: NSDate) -> Bool {
        let bgQueue = dispatch_queue_create("MY_BG_QUEUE", DISPATCH_QUEUE_SERIAL)//use your `bgQueue`
        dispatch_async(bgQueue) {
            self.bg_loadOneDay()
        }
        return true
    }
    
    func bg_loadOneDay() {
        let date = NSDate()
        dispatch_async(dispatch_get_main_queue()) {
            //....
        }
        bg_loadEventsAtDate(date)//not sure which date you are sending here, please check
    }
    
    func bg_loadEventsAtDate(date: NSDate) {
        dispatch_async(dispatch_get_main_queue()) {
            //....
        }
    }
    

    【讨论】:

    • 感谢您的回复!我不明白这个变量是如何快速获得它的值作为 __block 的。我仍在尝试了解整个过程...
    • 你在bg_loadOneDay方法中做什么?你能发布这个方法的完整代码吗?
    • 我实际上是在尝试创建一个日历并在其上加载事件。目标 c 中的代码是 - (void)bg_loadOneDay { __block NSDate *date; dispatch_sync(dispatch_get_main_queue(), ^{ if ((date = [self.daysToLoad firstObject])) { [self.daysToLoad removeObject:date]; } if (![self.dayPlannerView.visibleDays containsDate:date]) { date = nil ; } }); if (date) { [self bg_loadEventsAtDate:date]; } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2018-12-13
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多