将Objective-C块转换为Swift闭包

8
我希望将块转换为闭包,但是我不知道该如何做。我不知道问题出在哪里。 Objective-C:
// monthBlock type
typedef NSString *(^JTCalendarMonthBlock)(NSDate *date, JTCalendar *jt_calendar);

// Block
self.calendar.calendarAppearance.monthBlock = ^NSString *(NSDate *date, JTCalendar *jt_calendar){
    return @"";
};

Swift:

// Swift closure
self.calendar.calendarAppearance.monthBlock = {(date:NSDate, jt_calendar:JTCalendar) -> NSString in
    return "" as NSString
}  

产生错误:

错误:无法将类型为“(NSDate,JTCalendar) -> NSString”的值分配给类型为“JTCalendarMonthBlock!”的值

1个回答

16

您的参数类型不完全匹配。您可以选择以下操作:

self.calendar.calendarAppearance.monthBlock = { (date: NSDate!, jt_calendar: JTCalendar!) -> String! in
    return ""
}

或者,更简单地说:

calendar.calendarAppearance.monthBlock = { date, jt_calendar in
    return ""
}
我假设 JTCalendar 不是你自己的类。如果是的话,你可以考虑对它进行审核,并添加nullability注释来明确这些参数是否可能为nil。在没有这些注释的情况下,Swift无法知道这些参数是否可为空,因此它将这些参数解释为隐式解包可选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接