将Objective-C块转换为Swift闭包

我想将块转换为闭包,但是我不知道怎么做。我不知道怎么了

目标C:

// monthBlock type
typedef NSString *(^JTCalendarMonthBlock)(NSDate *date, JTCalendar *jt_calendar);

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

迅速:

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

产生错误:

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

您的参数类型不太匹配。您可以执行以下任一操作:

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

或者,更简单地说:

calendar.calendarAppearance.monthBlock = { date, jt_calendar in
    return ""
}

我认为JTCalendar这不是你自己的课。如果是这样,则可以考虑对其进行审核,添加可为空性注释,以明确表明这些参数是否可以nil在没有这些注释的情况下,Swift无法知道它们是否存在nullable,因此它将这些参数解释为隐式解包的可选参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章