2015-07-01 4 views
-1

Я только что загрузил Xcode 7 и запустил приложение через 1.0-2.0 migrator и получил пять ошибок, два с калькулятором, два с переключателем iPhone LED и один в mail в моем приложении.Ошибки Xcode 7 с .toInt, iPhone LED и почтовый композитор

Для caluclator, я получил ошибки для .toInt, говоря «toInt недоступен, используйте Int() инициализатору. Я пометил линии с черточками.

@IBAction func launchEmail(sender: AnyObject) { 

@IBOutlet weak var Screen: UILabel! 
var firstNumber = Int() 
var secondNumber = Int() 
var isTypingNumber = false 
var result = Int() 
var operation = "" 


@IBAction func number(sender: AnyObject) { 
    let number = sender.currentTitle 
    if isTypingNumber == true { 
     Screen.text = Screen.text! + number!! 
    } else { 
     Screen.text = number; 
    } 
    isTypingNumber = true 
} 


@IBAction func operation(sender: AnyObject) { 
    isTypingNumber = false 
    ---- firstNumber = Screen.text!.toInt()!---------- 
    operation = sender.currentTitle!! 
} 


@IBAction func equals(sender: AnyObject) { 
    ---- secondNumber = Screen.text!.toInt()! ---------- 
    if operation == "+" { 
     result = firstNumber + secondNumber 
    } else if operation == "-" { 
     result = firstNumber - secondNumber 
    } else if operation == "X" { 
     result = firstNumber * secondNumber 
    } else { 
     result = firstNumber/secondNumber 
    } 
    Screen.text = "\(result)" 
} 


@IBAction func clear(sender: AnyObject) { 
    firstNumber = 0 
    secondNumber = 0 
    isTypingNumber = false 
    result = 0 
    Screen.text = "\(result)" 
} 

Для телефоны LED, У меня было две ошибки: одна из них (в первой строке с тире) говорила: «Невозможно вызвать« LockForConfiguration »с типом аргумента (nil). На второй (пунктирная линия) он сказал: «„ошибка“дополнительный аргумент в вызове»

@IBAction func toggleFlash(sender: AnyObject) { 

    if let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) where device.hasTorch { 

      ---- device.lockForConfiguration(nil) ------- 
      if (device.torchMode == AVCaptureTorchMode.On) { 
      device.torchMode = AVCaptureTorchMode.Off 

     } else { 
      ---- device.setTorchModeOnWithLevel(1.0, error: nil) ------- 
     } 
     device.unlockForConfiguration() 
} 
} 

Наконец для почты композитора, На пунктирной линии, я получил ошибку упомянутый «„MFMailComposerResult“делает не имеет члена с именем 'value'. " @IBAction функ launchEmail (отправитель: AnyObject) {

if (MFMailComposeViewController.canSendMail()) { 

     let emailTitle = "Utilibox Feedback" 
     let messageBody = "I am experiencing the following issues:" 
     let toRecipents = ["[email protected]"] 

     let mc:MFMailComposeViewController = MFMailComposeViewController() 

     mc.mailComposeDelegate = self 
     mc.setSubject(emailTitle) 
     mc.setMessageBody(messageBody, isHTML: false) 
     mc.setToRecipients(toRecipents) 

     self.presentViewController(mc, animated: true, completion: nil) 

    } else { 
     print("No email account found.") 
    } 
} 

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 

    switch result.value { 

    case MFMailComposeResultCancelled.value: 
      print("Cancelled") 
    case MFMailComposeResultSaved.value: 
      print("Saved") 
    case MFMailComposeResultSent.value: 
      print("Sent") 
    case MFMailComposeResultFailed.value: 
      print("Failed") 
    default: 
     break 

    } 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

Что точные вещи я должен изменить их, чтобы заставить их работать. Я ценю всю помощь. СПАСИБО ТАК ТАК :) :)

+1

Измененное целочисленное преобразование и измененная обработка ошибок (с использованием исключений) документируются в примечаниях к бета-версии Xcode 7. Ваш первый вопрос - это дубликат http://stackoverflow.com/questions/30739460/toint-removed-in-swift-2. (И не является ли сообщение компилятора «toInt недоступно, используйте инициализатор Int()», достаточный для решения Google?). Как правило, ваш вопрос слишком широк, поскольку он содержит 3 разные проблемы. –

+0

Вы забыли пунктирные линии в последнем примере. – Qbyte

+0

Чтобы выразить признательность за помощь, вы должны принять ответ Qbyte. – Jeff

ответ

0

Для первой ошибки вы должны использовать инициализатор (failable) из Int вместо .toInt() вот так:

firstNumber = Int(Screen.text!)! 

Вторая ошибка происходит от новой обработки ошибок модель Swift 2, где много функций, которые в настоящее время обрабатываются ошибки с inout параметрами thows:

, если вы уверены, что никакая ошибка не генерируется (если да, то возникает ошибка времени выполнения) использовать:

try! device.lockForConfiguration() 
try! device.setTorchModeOnWithLevel(1.0) 

если ошибка может быть выброшен, но вы хотите, чтобы игнорировать его и продолжить выполнение (как сейчас):

do { 
    try device.lockForConfiguration() 
} catch {} 

if (device.torchMode == AVCaptureTorchMode.On) { 
    device.torchMode = AVCaptureTorchMode.Off 
} else { 
    do { 
     try device.setTorchModeOnWithLevel(1.0) 
    } catch {} 
} 
device.unlockForConfiguration() 

, если вы хотите, чтобы вернуться сразу после отбрасывается любая ошибка:

do { 
    try device.lockForConfiguration() 

    if (device.torchMode == AVCaptureTorchMode.On) { 
     device.torchMode = AVCaptureTorchMode.Off 
    } else { 
     try device.setTorchModeOnWithLevel(1.0) 
    } 
    device.unlockForConfiguration() 
} catch { 
    // here you can use an automatically created "error" variable 
    // notice that "error" can be from both functions 
    return 
} 

К сожалению, я не знаю исправления для третьей ошибки.

Смежные вопросы