2015-04-20 21 views
7

Bloğu kapatmaya dönüştürmek istiyorum, ancak nasıl olduğunu anlayamıyorum. Sorunun ne olduğunu bilmiyorum.Dönüştürme Objective-C bloğunu Swift kapanışına dönüştür

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 
} 

hata üretir:

Error: Cannot assign a value of type '(NSDate, JTCalendar) -> NSString' to a value of type 'JTCalendarMonthBlock!'

cevap

15

Kişisel parametre tipleri oldukça yukarı uyuşmuyor. Sen birini yapabilirsiniz: daha basit

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

Veya:

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

Ben JTCalendar Kendi sınıf değil varsayalım. Öyleyse, bu parametrelerin nil olup olmayacağını açık bir şekilde belirtmek için nullability annotations ekleyerek bunu denetlemeyi düşünebilirsiniz. Bu ek açıklamaların yokluğunda, Swift'in bunların nullable olup olmadığını bilmesinin bir yolu yoktur, bu nedenle bu parametreleri örtülü olarak isteğe bağlı olarak kaldırılmış isteğe bağlı olarak yorumlar.