一、 在Objective-C的1 [self performSelector:@selector (updateStatus) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO ];
在Swift中是没有performSelector方法的。替代方法有2种
1、设置Timer定时器 1 NSTimer.scheduledTimerWithTimeInterval(0.1 , target: self, selector: Selector("updateStatus" ), userInfo: nil, repeats: false )
2、利用GCD定时器 1 2 3 dispatch_after (1 , dispatch_get_main_queue (), { })
二、 1 text.boundingRectWithSize (CGSizeMake (w, CGFloat .max ), options: NSStringDrawingOptions .TruncatesLastVisibleLine | NSStringDrawingOptions .UsesLineFragmentOrigin | NSStringDrawingOptions .UsesFontLeading , attributes: attribute, context: nil )
这段正常的代码在iOS8.1、Xcode6.1下会报错。搜了一下发现这个 。意思是说当吧target设为OS X 10.10时,就正常。如果设为iOS8 SDK,就会警告异常。NSStringDrawingOptions被Swift作为enum:Int类型,而不是struct:RawOptionSet,这是Apple的bug。PS:我第一次向Apple报告iOS SDK的bug。 同时,这里 给出了一个解决方法。就是在Objective-C中写好多个option的连接方法,然后在Swift中调用该方法。1 2 3 4 + (NSStringDrawingOptions )combine:(NSStringDrawingOptions )option1 with:(NSStringDrawingOptions )option2 { return option1 | option2; }
1 let boundingRect = "string" .boundingRectWithSize(size, options: StringDrawingOptions.combine(.UsesLineFragmentOrigin, with: .UsesFontLeading), attributes: nil, context: nil)