首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将目标-C块转换为Swift闭包

将目标-C块转换为Swift闭包
EN

Stack Overflow用户
提问于 2015-04-20 09:40:00
回答 1查看 3.4K关注 0票数 8

我想把街区转换成封闭,但我不知道怎么做。我不知道有什么问题。

目标-C:

代码语言:javascript
复制
// monthBlock type
typedef NSString *(^JTCalendarMonthBlock)(NSDate *date, JTCalendar *jt_calendar);

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

Swift:

代码语言:javascript
复制
// Swift closure
self.calendar.calendarAppearance.monthBlock = {(date:NSDate, jt_calendar:JTCalendar) -> NSString in
    return "" as NSString
}  

产生错误:

错误:不能将类型'(NSDate,JTCalendar) -> NSString‘的值分配给’JTCalendarMonthBlock‘类型的值!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-20 10:41:04

您的参数类型不完全匹配。你可以这样做:

代码语言:javascript
复制
self.calendar.calendarAppearance.monthBlock = { (date: NSDate!, jt_calendar: JTCalendar!) -> String! in
    return ""
}

或者,更简单地说:

代码语言:javascript
复制
calendar.calendarAppearance.monthBlock = { date, jt_calendar in
    return ""
}

我想JTCalendar不是您自己的类。如果是的话,您可能会考虑对其进行审计,添加空注释以明确这些参数是否可以是nil。在没有这些注释的情况下,Swift无法知道这些参数是否为nullable,因此它将这些参数解释为隐式展开选项。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29744265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档