Печать в iOS из Swift в XCode 6 beta 7

Вот код, который я использую для аэропечати Swift с бета-версией 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)
    }
}

Конечно, бета-версия 7 сломала его: «Значение необязательного типа« UIPrintInteractionController »не развернуто; вы хотели использовать ! или ??» в первой строке var. К сожалению, предложенное XCode исправление не исправляет это, и я недостаточно умен, чтобы понять это самостоятельно!


person Jim Barber    schedule 02.09.2014    source источник


Ответы (1)


Xcode 6 beta 7 провел аудит большей части Cocoa Touch API на предмет того, как он предоставляет необязательные значения, то есть те, которые могут быть нулевыми. Похоже, что общий контроллер печати является одним из таких значений. Открыв версию заголовка Swift для UIPrintInteractionController, я вижу:

class func sharedPrintController() -> UIPrintInteractionController?

Тип со знаком вопроса в конце — UIPrintInteractionController? — указывает, что возвращаемое значение sharedPrintController() может быть экземпляром UIPrintInteractionController или может быть нулевым.

Если вы уверены, что в ситуации, когда вы вызываете этот метод, он всегда будет возвращать ненулевое значение, вы можете немедленно заставить это необязательное значение "развернуться" в экземпляр UIPrintInteractionController:

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

С другой стороны, если вы думаете, что когда-нибудь сможете получить nil с помощью этого метода, вы можете использовать синтаксис необязательная привязка Swift, чтобы проверить этот случай, и продолжать использовать pic, только если он не равен nil:

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

В любом случае, Xcode сообщает вам, что теперь вам нужно иметь дело с тем фактом, что общий контроллер печати отображается как необязательное значение в бета-версии 7.

person Tim    schedule 03.09.2014