2017-01-06 1 views
0

Dies ist mein Code Ich weiß nicht, was ich falsch gemacht habe. Alle Probleme sind in Funktion steve. LebelText ist ein Timer-Timer-Label, das von einem anderen View-Controller gesendet wird. Also möchte ich lebetText zu einem int konvertieren, um 1 davon zu subtrahieren und dann zurück in einen String umwandeln, um die Zahl anzuzeigen.Schwerwiegender Fehler beim Auspacken eines segued String (swift3)

Dies ist Ansicht Controller a. Das gesendete Wesen ist 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)" 


    }} 

Dies ist View-Controller b. Das Ziel ist es, lebelText zu nehmen, um es in ein int zu konvertieren, um es von 1 zu subtrahieren. Dann wandle es zurück in eine Zeichenkette, damit es angezeigt werden kann.

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

etwas ausführlicher wäre gut, auch Ihre variable Namensgebung hilft nicht zu viel zu verstehen, was Sie erreichen wollen, vielleicht könnte man auch ein wenig mehr erklären, dass. –

+0

Ich verstehe nicht, was Sie hier überhaupt machen wollen. Zuerst instanziieren Sie eine Zeichenfolge mit dem Namen LebelText ohne Wert und weisen sie dann einer anderen Variablen zu, z. B. eq, die Sie dann in Int einschreiben möchten. Was .. was ist los? – SaylorTwift2

+0

@MagoNicolasPalacios. LebelText ist ein Label, das von einem anderen View-Controller stammt. lebelText ist eine Bezeichnung, die eine Nummer anzeigt, an der der Timer gestoppt wurde. Dann versuche ich 1 von lebelText zu subtrahieren. Also versuche ich, lebelText von string nach int zu nehmen (wo ich 1 von der int subtrahiere) und dann das int in eine string umwandelt. Also kann ich auf label dxe anzeigen. –

Antwort

1

ok so, um loszuwerden, der optional und um sicherzustellen, dass alles funktioniert Sie wie

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

tun sollten, aber ich würde empfehlen Ihnen einige leichtere Aufgaben zu starten, es sieht aus wie Sie haben, Grundlagen nicht vollständig lernen.

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

das hat nicht funktioniert, weil die Variablen nicht definiert sind. –

+0

Ich habe den Code bearbeiten, wie es eigentlich aussehen sollte, müssen Sie Steckdose zurücksetzen, wenn Sie den Namen ändern – JuicyFruit

+0

dies entfernt den Fehler, aber trägt nicht den Wert über. Es gibt keine Wertanzeige. Es zeigt den Wert nicht an. –

-1

Sie können nur dies tun.

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

Fehlermeldung kommt auf var eq = Int (LebelText.text) sagen, dass Zeichenfolge keinen Mitgliedstext hat. –

+0

Wir benötigen mehr Informationen über Ihren Code, da Sie LebelText als String und Not als Label verwenden, deshalb hat es kein Member .text. Vielleicht kannst du versuchen, nur den .text zu entfernen. Aber da ich nicht sicher bin, wie du das andere Label verschickst, kann ein Segue es nicht wissen. –

+0

Beide View-Controller hinzugefügt. –

Verwandte Themen