Paso un número largo como cadena de FirstVC.swift a SecondVC.swift como:

let userId = user.userID // GOT FROM GOOGLE SIGN IN

let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondVC") as! SecondVC
let navigationController = self.tabBarController?.navigationController
vc.socid = userId!
let transition = CATransition()
transition.duration = 0.3
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionMoveIn
transition.subtype = kCATransitionFromTop
self.navigationController?.view.layer.add(transition, forKey: nil)
self.navigationController?.pushViewController(vc, animated: false)

Y recibir en SecondVC.swift:

var socid:String!

override func viewDidLoad() {
    super.viewDidLoad()

    print(socid) // RETURNS Optional("11365489964475")

    if(socid==nil){
        print("socid is empty")
    }else{
        let i1 = Int(socid!)! + 7778955 //I GET ERROR HERE
    }

}

Pero recibo el error: Tema 1: Error grave: se encontró inesperadamente nulo al desenvolver un valor opcional

Si socid tiene un valor opcional, ¿por qué no puedo desenvolver la cadena? Y cuando socid es igual a algún otro número corto, todo funciona.

0
Scripy 28 feb. 2018 a las 10:21

4 respuestas

La mejor respuesta

Para mí, su código funciona, pero aún así creo que sería una buena práctica evitar el desenvolvimiento forzado. Tal vez haga algo como esto en su lugar:

if let socid = socid, let socidInt = Int(socid) {
  let i1 = socidInt + 7778955
  print(i1)
} else {
  print("Failed to unwrap socid to an integer")
}
0
Joakim Danielson 28 feb. 2018 a las 07:57

Está fallando porque la conversión de su cadena a un int está fallando:

let i1 = Int(socid!)! + 7778955

Si Int(bigthing) falla, entonces será nulo.

0
Ewan Mellor 28 feb. 2018 a las 07:48

Prueba esto...

override func viewDidLoad() {
    super.viewDidLoad()

    if let socid = socid, var i1 = Int(socid)
    {
        i1 += 7778955
        print("Te number is \(number)")
    }
}
0
Adolfo 28 feb. 2018 a las 08:01
let socid = ""

override func viewDidLoad() {
    super.viewDidLoad()

   let mySocid = Int(socid)

    guard let mySocid2 = mySocid else {
        return
    }
    let newValue = mySocid2 + 50

    print("newValue\(newValue)")
    // Do any additional setup after loading the view, typically from a nib.
}
0
Quiet Islet 28 feb. 2018 a las 07:50