String 字符串为空时,Swift将给出致命错误
我有一些字符串代码,但当我的字符串值为null时,我的应用程序出现致命错误,我的代码在这里,我需要做哪些更改String 字符串为空时,Swift将给出致命错误,string,swift,String,Swift,我有一些字符串代码,但当我的字符串值为null时,我的应用程序出现致命错误,我的代码在这里,我需要做哪些更改 let pCodeTextFieldStr:NSString = pCodeTextField.text! let pNameTextFieldStr:NSString = pNameTextField!.text! let pQuantityTextFieldStr:NSString = pQuantityTextField.text! let commingReadyIDs:NSS
let pCodeTextFieldStr:NSString = pCodeTextField.text!
let pNameTextFieldStr:NSString = pNameTextField!.text!
let pQuantityTextFieldStr:NSString = pQuantityTextField.text!
let commingReadyIDs:NSString = prefs.valueForKey("addClientID") as! String!
let commingCurrs:NSString = prefs.valueForKey("addClientCurrency") as! String!
let commingtype:NSString = prefs.valueForKey("addProductType") as! String!
let productnameclean:NSString = prefs.valueForKey("addProductName") as! String!
感叹号
代码>告诉编译器“如果此项为零,请崩溃”。因此,第一步是不要这样做。第二步是弄清楚如果某个值为零,你想做什么。通常使用if let…
或使用nil合并运算符?
来处理此问题,因为这些字符串值可能不存在,所以不应强制展开它们。可选变量表示一个变量,该变量可能有值,也可能有nil。Swift鼓励作为开发人员的您承认这一点,并在值可能返回零的情况下展开。使用!,你告诉编译器,我知道这里有一个值,在你的例子中,没有,并且抛出了一个异常
在下面的示例中,如果键存在字符串,它将进入块的范围,您可以使用常量变量commingReadyIDs访问该字符串。否则,将不会输入该块,也不会发生异常
我鼓励您在Swift文档中阅读更多关于选项的内容,因为您经常会遇到它们,它们鼓励开发人员避免这些空指针异常
if let commingReadyIDs = prefs.valueForKey("addClientID") as? String{
//do whatever
}
他们不是“意见”,而是事实
让commingCurrs:NSString
说明commingCurrs
永远不能为零
同样地,片段prefs.valueForKey(“addClientID”)为!绳子
声明prefs.valueForKey(“addClientID”)
永远不能返回nil
由于您的数据显然可能为零,因此您必须解决差异
您已获得3个选项,唯一可能的其他选项是将变量声明为可选变量而不是必需变量:
let commingReadyIDs:String? = prefs.valueForKey("addClientID") as? String
但那只是在路上踢易拉罐而已。迟早你会不得不面对这样一个事实:这些值在某个时刻将为零
只要一个提示,任何时候你都可以选择放置代码>在swift程序中,您需要仔细思考,这真的是正确的做法吗?这真的永远不会是零吗<代码>
是swift语言中最邪恶、最阴险的字符。如果您不知道变量的值何时存在或何时不存在,那么您应该使用下面的代码
// all defined variables (like pCodeTextField) can have value or can be nil so don't use forcefully unwrapped optional value without cheking nil
let pCodeTextFieldStr:NSString? = pCodeTextField?.text
let pNameTextFieldStr:NSString? = pNameTextField?.text
let pQuantityTextFieldStr:NSString? = pQuantityTextField?.text
let commingReadyIDs : NSString? = prefs?.valueForKey("addClientID") as? String
let commingCurrs : NSString? = prefs?.valueForKey("addClientCurrency") as? String
let commingtype : NSString? = prefs?.valueForKey("addProductType") as? String
let productnameclean : NSString? = prefs?.valueForKey("addProductName") as? String
是的,很好的意见,但我还有5个字符串,我需要全部使用,如果是的话,对于您的用例,看起来您需要展开其中的每一个,因为变量彼此独立,但是如果值为零,则可能取决于您要执行的操作。是的,好的意见,但我还有5个字符串,我需要使用所有字符串,如果?@SwiftDeveloper您必须回答的问题是,当特定键的值为nil
或无法解释为字符串时,您希望执行什么操作。你必须定义(或要求产品负责人)来定义这种情况下的预期行为。多谢老兄,我认为解决方案永远不会是零