2017-01-06 3 views
0

Это мой код. Я не знаю, что я сделал не так. Все проблемы находятся в функции steve. LebelText - это метка таймера, которая отделяется от другого контроллера. Поэтому я хочу, чтобы lebetText преобразовал его в int, чтобы вычесть 1 из него, а затем вернет его обратно в строку, чтобы отобразить номер.Неустранимая ошибка при распаковке выделенной строки (swift3)

Это контроллер вида a. Текстовое изложение - lebelText.

import UIKit 

class testViewController: UIViewController { 

@IBOutlet var lazel: UILabel! 

@IBOutlet var plax: UIButton! 
@IBOutlet var stopx: UIButton! 

var timer = Timer() 
var counter = 0.0 
var isRunning = false 


override func viewDidLoad() { 
    super.viewDidLoad() 





} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let DestViewController : restultViewController = segue.destination as! restultViewController 

    DestViewController.LebelText = lazel.text! 

} 
@IBAction func play(_ sender: Any) { 

    if !isRunning{ 
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(testViewController.update), userInfo: nil, repeats: true) 
} 
    plax.isEnabled = false 
    stopx.isEnabled = true 

     } 

@IBAction func stop(_ sender: Any) { 

    plax.isEnabled = true 
    stopx.isEnabled = false 
    timer.invalidate() 
    isRunning = false 


    } 


    func update(){ 
    counter += 0.1 
    lazel.text = String(format: "1%f", counter) 
    lazel.text = "\(counter)" 


    }} 

это контроллер вида b. Цель состоит в том, чтобы использовать lebelText для преобразования его в int, чтобы вычесть 1 из него. Затем преобразуйте его обратно в строку, чтобы он отображался.

import UIKit 
    class restultViewController: UIViewController { 

    @IBOutlet var dxe: UILabel! 


    var LebelText = String() 

    let myInt = Int() 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    steve() 

    } 
    func steve(){ 

var eq = LebelText 

var intValue = Int(eq) 

let vx = intValue! - 1 
let ramit = String(vx) 
dxe.text = ramit 
    } 
+0

a Немного больше деталей было бы хорошо, также ваше именование переменных не поможет понять, чего вы хотите достичь, может быть, вы могли бы объяснить это немного больше. –

+0

Я не понимаю, что вы пытаетесь сделать здесь вообще. Во-первых, вы создаете строку под названием LebelText, без значения, тогда вы назначаете ее другой переменной eq, которую затем пытаетесь применить в Int. Что ... что происходит? – SaylorTwift2

+0

@MagoNicolasPalacios. LebelText - это метка, которая выведена из другого контроллера представления. lebelText - это метка, на которой отображается номер, где таймер был остановлен. Затем я пытаюсь вычесть 1 из lebelText. Поэтому я пытаюсь взять lebelText из строки в int (где я вычитаю 1 из int), а затем преобразует int в строку. Поэтому я могу отображать на ярлыке dxe. –

ответ

1

ИТАК, чтобы избавиться от дополнительного и быть уверен, что все это работает, вы должны сделать, как

if let intValue = Int(eq) { 
    vx = intValue - 1 
    dxe.text = String(vx) 
} else { 
    //do some stuff if you cannot convert eq to Int 
} 

, но я бы порекомендовал вам начать с некоторыми более простыми задачами, это выглядит, как вы делали не полностью изучают основы.

import UIKit 
class restultViewController: UIViewController { 

    @IBOutlet var someLabel: UILabel! 
    public var myText: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.parseData() 
    } 

    private func parseData(){ 
     guard let unwrapedText = self.myText else { 
      //you didn't pass string 
      return 
     } 
     if let myInt = Int(unwrapedText) { 
      myInt = myInt - 1 
      self.someLabel.text = String(myInt) 
     } else { 
      //you string is not convertable to int 
     } 
    } 
} 
+0

это не сработало, потому что переменные не определены. –

+0

Я редактирую код, как он на самом деле должен выглядеть, вам нужно сбросить розетку, если вы измените ее имя – JuicyFruit

+0

, это заберет ошибку, но не переносит значение. Отображение значений не отображается. Он не отображает значение. –

-1

Вы можете это сделать.

import UIKit 
    class restultViewController: UIViewController { 

    @IBOutlet var dxe: UILabel! 


    var LebelText = String() 

    let myInt = Int() 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    steve() 

    } 
    func steve(){ 

var eq = Int(LebelText.text) 

eq = eq - 1 

dxe.text = String(eq) 
    } 
+0

сообщение об ошибке, появившееся на var eq = Int (LebelText.text), говорящее, что строка не имеет текста участника. –

+0

Нам нужна дополнительная информация о вашем коде, поскольку вы используете LebelText как строку и не как метку, поэтому у нее нет члена .text. Может быть, вы можете попробовать удалить только .text. Но так как я не уверен, как вы отправляете другой ярлык как segue, вы не можете знать. –

+0

Добавлены оба контроллера вида. –

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