在XCode 6 beta 7中从Swift在iOS中打印



这是我用测试版6进行Swift航空打印时使用的代码,它运行良好:

@IBAction func button3Tapped() {
    var pic:UIPrintInteractionController = .sharedPrintController()
    var viewpf:UIViewPrintFormatter = myTextView.viewPrintFormatter()
    pic.delegate = self
    pic.showsPageRange = true
    pic.printFormatter = viewpf
    if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
        pic.presentFromRect(self.myButton3.frame, inView:self.view, animated:true, completionHandler: nil)
    } else {
        pic.presentAnimated(true, completionHandler: nil)
    }
}

当然,beta 7在第一行var中用了一个"可选类型为'UIPrintInteractionController'的值没有打开;你是想用!还是??"来打破它。不幸的是,XCode建议的修复并没有修复它,而且我还不够聪明,无法自己解决!

Xcode 6 beta 7审计了Cocoa Touch API的大部分内容,了解其如何公开可选值,也就是说,那些可能为零的值。看起来共享打印控制器就是这样一个值。打开UIPrintInteractionController的Swift版本的头,我看到:

class func sharedPrintController() -> UIPrintInteractionController?

带有尾随问号的类型UIPrintInteractionController?表示sharedPrintController()的返回值可以是UIPrintInteractionController的实例,也可以是nil。

如果你确信,在你调用该方法的情况下,它总是会返回一个非零值,你可以立即强制这个可选值"打开"到UIPrintInteractionController:的实例中

var pic = UIPrintInteractionController.sharedPrintController()!
// the rest of your code

另一方面,如果您认为您可能会从该方法中获得nil,则可以使用Swift的可选绑定语法来检查该情况,并仅在非nil:的情况下继续使用pic

if let pic = UIPrintInteractionController.sharedPrintController() {
    // the rest of your code
}

无论哪种方式,Xcode都告诉您,您现在需要处理共享打印控制器在beta 7中作为可选值公开的事实。

最新更新