【问题标题】:Printing in iOS from Swift in XCode 6 beta 7在 XCode 6 beta 7 中从 Swift 在 iOS 中打印
【发布时间】: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 建议的修复并没有修复它,而且我还不够聪明,无法自己解决!

【问题讨论】:

    标签: ios swift airprint


    【解决方案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 中作为可选值公开的事实。

    【讨论】:

      猜你喜欢
      • 2014-10-29
      • 1970-01-01
      • 2015-12-02
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      相关资源
      最近更新 更多