我正在尝试将objc项目迁移到swift3。我不确定如何将数组与nil进行比较。我找到了this主题,但那是2年前,swift的语法发生了很大的变化。
如果我在swift中有这样的代码:
let variable = something as? NSArray
if variable == nil {
// do something
}
它不会让我将此变量与nil进行比较,从而导致错误“比较此变量,始终返回false”。我试过将variable.description与“”进行比较,但它是否做同样的事情? 通过“某事”我的意思是:
var variable = dict.object(forKey: someString) as! NSArray
我想要做的主要是:
var variable = dict.object(forKey: someString) as! NSArray
if variable == nil {
//create
}
else {
// append
}
答案 0 :(得分:3)
这就是可选的解包语法。您可以将展开和强制转换合并到一个if语句中:
if let variable = something as? NSArray {
// variable is not nil and is an NSArray
// Now you can do something with it.
} else {
// Either something is nil or it is not able to be cast as an NSArray
// Handle this case.
}
我还应该提一下,如果你不需要在Objective-C中使用something
,那么你应该使用Swift本机数组类型。这可以这样声明:
let someArray = ["string1", "string2"]
答案 1 :(得分:1)
此行表示变量 且必须为NSArray。如果dict.object(forKey: someString)
不是NSArray,则会导致崩溃
var variable = dict.object(forKey: someString) as! NSArray
// ^
// This exclamation mark means you are certain this is an NSArray
// Also, because there is no question mark after NSArray, this variable
// is not optional. It cannot be nil
但是,然后使用
if variable == nil {
这就是警告的来源。变量永远不能为零,因为变量不是 optional
你可能想要的是:
if let variable = dict.object(forKey:someString) as? NSArray
如果出现以下情况,则返回false:
dict.object(forKey:someString)
返回一个nil对象此后variable
现在是非可选 NSArray。它保证是一个NSArray,并保证不是nil
。您可以在不使用展开的情况下使用它。 e.g。
if let variable = dict.object(forKey:someString) as? NSArray {
for element in variable {
}
}
else {
//The dict doesn't contain the object yet. `variable` is nil
//Create a new array and add it to dict
let newArray = ["First Value"]
dict[someString] = newArray
}
答案 2 :(得分:0)
let variable = something as? NSArray
通过此声明,variable
将是一个可选类型(NSArray?
),永远不会为零。这是因为使用as?
进行转换会返回一个可选值,该值包含成功转换的对象或不包含任何内容。你可以通过 alt - 在Xcode中点击变量名来看到这一点。
如果您想知道它是否包含值,您需要使用if let
语法:
if let variable = variable {
// variable is guaranteed to be an NSArray here.
}
答案 3 :(得分:0)
您也可以将此格式与<div class="adxHeader">
<h3 itemprop="name"> » درج داخلي للاجار جديد حي المونسيه</h3>
<div class="adxExtraInfo">
<div class="adxExtraInfoPart"><a href="/city/الرياض"><i class="fa fa-map-marker"></i> الرياض</a></div>
<div class="adxExtraInfoPart"><a href="/users/ابو نوره"><i class="fa fa-user"></i> ابو نوره</a></div>
</div>
<div class="adxExtraInfo">
<div class="adxExtraInfoPart"> قبل ساعه و 27 دقيقه</div>
<div class="adxExtraInfoPart">#20467014</div>
</div>
<div class="moveLeft">
<a href="www.google.com" class="nextad"> ← التالي </a>
<br />
</div>
</div>
:
guard-else