[swift]调用函数在 viewDidLoad 崩溃

标签: ios Swift
发布时间: 2017/3/6 23:20:28
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

调用 parseString 崩溃我的应用程序。 myOptionalString 准备从 didSelectRowAtIndexPath 表中。信息是绝对可以传递到此视图控制器。

如果从按下一个按钮调用,方法也有效。但在我尝试任何生命周期方法我竟然找到零同时展开可选。

override func viewDidLoad() {
    super.viewDidLoad()   
    if let myUnwrappedString = myOptionalString{
         print(myUnwrappedString) //<-- prints out string
         confidence.text = parseString(myUnwrappedString) //<-- unexpectedly found nil while unwrapping an Optional crash
    }        
}

//this method works if called on a button press but crashes in viewDidLoad
func parseString(myString: String)->String{
    return myString.substringFromIndex(myString.rangeOfString(" ")!.endIndex)
}

解决方法 1:

你的错误来自您的函数 parseString ,让我们看看为什么。如果你仔细看你的函数你正在使力展开的一个可选的值在您的案例 myString.rangeOfString(" ")! 。这不是在所有建议。

如果我们的字符串传递给 "Confidence: 63%" 函数功能工作正常,返回 "63%" ,但它因为它有 " " 里面的字符串,如果出于某种原因,你通过一些字符串,没有它就会导致崩溃 (例如 "Confidence:63%" )。

所以正确的实施方法之一此函数可以使用 guard 语句使用可选绑定避免任何力量展开

func parseString(myString: String) -> String? {
   guard let range = myString.rangeOfString(" ") else { return nil }
   return myString.substringFromIndex(range.endIndex)
}

你在上面的函数返回 nil 的情况下不存在 " " 在字符串中,避免运行时错误。

我希望这帮助你。

赞助商