我想知道是否有办法关闭/避免黄色'在if let...NSUserDefaults
构造中xcode中的警告,其中键是已知值。
例如:
if let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey") as? Int {...}
由于if let
我必须使用as?
。但是,由于我使用的是已知值类型(在本例中为整数),as? Int
实际上是多余的 - 这就是为什么我收到黄色警告'。
思考?有没有更好的方法来编码这些类型的结构?
答案 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)."€";
}
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中必不可少的语义之一。