Swift选项 - 来自' x'的条件演员警告到' x'永远成功

时间:2015-12-18 10:58:21

标签: swift2 nsuserdefaults

我想知道是否有办法关闭/避免黄色'在if let...NSUserDefaults构造中xcode中的警告,其中键是已知值。

例如:

if let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey") as? Int {...}

由于if let我必须使用as?。但是,由于我使用的是已知值类型(在本例中为整数),as? Int实际上是多余的 - 这就是为什么我收到黄色警告'。

思考?有没有更好的方法来编码这些类型的结构?

2 个答案:

答案 0 :(得分:8)

我的建议是解决问题而不是消除警告。 :)

NSUserDefaults.standardUserDefaults().integerForKey("myKey")不会返回“可选”,并且类型已知,因此您既不需要使用if let进行可选绑定,也不需要使用as?进行类型转换。

就是这样:

let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey")

就足够了,因为如果.integerForKey无法获得实际值,0只会返回.integerForKey

如果您不喜欢这种获取默认值的行为(我不是),那么请不要使用objectForKey并使用.objectForKey和可选的绑定而是铸造类型。就像你先做的那样,.integerForKey替换if let x = NSUserDefaults.standardUserDefaults(). objectForKey("myKey") as? Int {...} 。这样,如果密钥的值无法访问,您将获得实际的nil,而不是默认值。

<?php

function sum() {
    $a = 5;
    $b = 10;
    echo "Total: ".($a + $b)."&euro;";
}

sum();

?></p>

<form id="myForm" name="FinalAccept" method="post" action="sum.php"><br>
<input id="rYes" type="radio" name="payment" value="0" onclick="document.getElementById('myForm').submit();">
<label>Cash on delivery</label><br>
<input id="rNo" type="radio" name="payment" value="5" onclick="document.getElementById('myForm').submit();">
<label>Bank transfer</label><br><br>
</form>

<?php

if(isset($_POST['payment'])) {
    echo "<span>Choose payment method.</span><br>";
    echo "<span>".(sum() - $_POST['payment'])."</span>";
}

else {
    echo "<span>Choose payment method.</span>";
}

?>

答案 1 :(得分:2)

首先检查签名:
- 点击符号integerForKey:或查看快速帮助。

你会看到:

func integerForKey(_ defaultName: String) -> Int

它显示返回值是非可选的。

可以直接检索非选项,如Eric的答案所述,没有任何类型转换,可选绑定会导致错误。

这是Swift中必不可少的语义之一。