如何检查Swift中的未定义或空变量?

问题描述:

这里是我的代码:如何检查Swift中的未定义或空变量?

var goBack: String! 

if (goBack == "yes") 
    { 
     firstName.text = passFirstName1 
     lastName.text = passLastName1 
    } 

所有我想要做的就是执行if语句如果“GoBack的”是不确定的。我怎样才能做到这一点? (我不知道该把什么放在空白处)

整个程序比较复杂,这就是为什么我需要变量最初是未定义的。总之,我声明'goBack',要求用户输入他们的名字和姓氏,然后继续到下一个视图控制器。该视图控制器有一个后退按钮,将我们带回第一个视图控制器(我声明'goBack')。当按下后退按钮时,'goBack'字符串也会传递“yes”。我也把名字和姓氏传给了下一个视图控制器,但现在我想把它传回去。我能够将它传回,它只是让文本出现的问题。

编辑:firstName和lastName是标签,而passFirstName1和passLastName1是来自第二个视图控制器的变量。

+0

Swift中没有“undefined”这样的东西。但'goBack'是一个可选项。未赋值的'Optional'的值为'nil'。 – matt 2014-11-24 02:18:15

+0

另外,不知道这是否有帮助,但你定义一个可选的“?”在排版结束时,“!”只是强制解包可选。所以:var things:String?是可选的 – newshorts 2015-08-07 03:24:58

“我想要做的就是执行if语句,如果'goBack'未定义,我该怎么做?

检查一个变量是否等于nil可以使用雨燕的一个很酷的功能,称为如果,让言

if let goBackConst = goBack { 
    firstName.text = passFirstName1 
    lastName.text = passLastName1 
} 

它本质上的“在逻辑上相当于我们能存储goBack作为非可选常量,即我们可以“让”常量= goBack?如果是,请执行以下操作。“

+0

也就是说,假设我理解你的问题,@DomB ... – 2014-11-24 19:16:20

这真的很有趣,你可以定义一个变量作为可选的,这意味着它可能会或可能不会进行定义,考虑下列之情况:

要找出如果应用程序已经安装之前...

let defaults = NSUserDefaults() 
let testInstalled : String? = defaults.stringForKey("hasApplicationLaunchedBefore") 
if defined(testInstalled) { 
    NSLog("app installed already") 
    NSLog("testAlreadyInstalled: \(testInstalled)") 
    defaults.removeObjectForKey("hasApplicationLaunchedBefore") 
} else { 
    NSLog("no app") 
    defaults.setValue("true", forKey: "hasApplicationLaunchedBefore") 
} 

然后,所有你需要做的是写一个函数来测试零...

func defined(str : String?) -> Bool { 
    return str != nil 
} 

而且你已经得到它。一个简单的例子可能是以下几点:

if let test : String? = defaults.stringForKey("key") != nil { 
    // test is defined 
} else { 
    // test is undefined 
} 

末的感叹号是为展开可选的,而不是将变量定义为可选或不

“我想要做的就是执行if语句如果'goBack'未定义“

guard声明(Swift 2中的新声明)允许这样做。如果goBack为零,则else块将运行并退出该方法。如果goBack不是零,那么在守护语句后面可以使用localGoBack

var goBack:String? 

func methodUsingGuard() { 

    guard let localGoBack = goBack else { 
     print("goBack is nil") 
     return 
    } 

    print("goBack has a value of \(localGoBack)") 
} 

methodUsingGuard() 

从Swift编程语言(Swift 3。1):

在if语句的正文中,只有在if语句的正文中才可以使用在if语句中使用可选绑定创建的常量和变量。与之相反,在保护语句后面的代码行中可以使用保护语句 创建的常量和变量,如Early Exit中所述的 。