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

Posted

技术标签:

【中文标题】在 XCode 6 beta 7 中从 Swift 在 iOS 中打印【英文标题】:Printing in iOS from Swift in XCode 6 beta 7 【发布时间】:2014-09-02 22:50:07 【问题描述】:

这是我用于 Swift airprinting 和 beta 6 的代码,它运行良好:

@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 打破了它,“可选类型 'UIPrintInteractionController' 的值未解包;您的意思是使用 ! 还是 ??”在第一个 var 行上。不幸的是,XCode 建议的修复并没有修复它,而且我还不够聪明,无法自己解决!

【问题讨论】:

【参考方案1】:

Xcode 6 beta 7 对 Cocoa Touch API 的大部分内容进行了审核,以了解它如何公开可选值——即那些可能为 nil 的值。看起来共享打印控制器就是这样一个值。打开 UIPrintInteractionController 的标头的 Swift 版本,我看到了:

class func sharedPrintController() -> UIPrintInteractionController?

结尾有问号的类型——UIPrintInteractionController?——表示sharedPrintController()的返回值可能是UIPrintInteractionController的一个实例,也可能是nil。

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

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

另一方面,如果你认为你可能会从那个方法中得到 nil,你可以使用 Swift 的 optional binding 语法来检查这种情况并继续使用pic,除非它是非无:

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

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

【讨论】:

以上是关于在 XCode 6 beta 7 中从 Swift 在 iOS 中打印的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 6 beta 4中的Swift有哪些改变?

Xcode 7 beta (5 & 6) 看不到某些 VC 的 IBOutlets

Xcode 6 beta 7 UIView.animateWithDuration 调用中的额外参数“usingSpringWithDamping”

无法使用 Swift 2 在 Xcode 7 beta 中导入 FBSDK

如何在 swift 中制作动画(xcode 6 beta)

反射 Swift 2.0 XCode 7 beta 5