是否可以在Swift if语句中定义变量?

时间:2015-08-19 17:45:20

标签: swift if-statement

是否可以在Swift if语句中定义变量,然后在语句之外使用它?

    var cellWidth = requiredWidth
    if notification.type == "vote"{
        var cellWidth = maxWidth - 80
        println("cellWidth is \(cellWidth)")
        println("maxWidth is \(maxWidth)")
    }
    println("cellWidth is \(cellWidth)")

我可以将使用cellWidth的代码复制到if语句中,但这似乎效率低下。有没有更好的方法来处理Swift中的条件变量?

5 个答案:

答案 0 :(得分:2)

而不是

var cellWidth = maxWidth - 80

只需使用:

cellWidth = maxWidth - 80

cellWidth已在if语句之外定义。

答案 1 :(得分:2)

不,但你可以在之前定义它:

var cellWidth = requiredWidth
if notification.type == "vote"{
    cellWidth = maxWidth - 80
    println("cellWidth is \(cellWidth)")
    println("maxWidth is \(maxWidth)")
}
println("cellWidth is \(cellWidth)")

如果您在if语句之前不知道该值是什么,则可以将其设为可选值。

答案 2 :(得分:2)

在您的代码中,您实际上创建了两个单独的变量,都称为cellWidth。它们具有不同的范围:在if语句中,在该范围内创建的cellWidth具有优先级,因为它具有最深的范围;在if语句之外,内部cellWidth不可见,因为它无法访问该范围。因此,使用上面的代码,您会发现最后println语句将始终打印一个等于requiredWidth的值,即使在评估if语句时也是如此。

您真正想要做的就是使用修改cellWidth语句中现有的if变量:

var cellWidth = requiredWidth
if notification.type == "vote"{
    cellWidth = maxWidth - 80
    println("cellWidth is \(cellWidth)")
    println("maxWidth is \(maxWidth)")
}
println("cellWidth is \(cellWidth)")

当然,如果您的代码实际上与上述问题中显示的一样简单,您只需使用:

let cellWidth = notificationType == "vote" ? maxWidth - 80 : requiredWidth

答案 3 :(得分:2)

不,你不能。 >>> class Simon: ... name = 'Simon' ... @classmethod ... def says(cls, sentence): ... return '%s says: %s' % (cls.name, sentence) ... >>> class Eva(Simon): ... name = 'Eva' ... def to_past_tense(self, func): ... def wrapper(*arg, **kw): ... present_tense = func(*arg, **kw) ... past_tense = present_tense.replace('says', 'said') ... return past_tense ... return wrapper ... @classmethod ... def says(cls, *arg, **kw): ... return cls.to_past_tense(cls, super().says)(*arg, **kw) ... >>> Eva.says('Hello') 'Eva said: Hello' 语句定义了一个本地范围,因此您在其范围内定义的任何变量都不会在其外部访问。

您有几个选择

if

或(更好的恕我直言)不使用变量,但只使用常量

var cellWidth = requiredWidth
if notification.type == "vote"{
    cellWidth = maxWidth - 80
    println("cellWidth is \(cellWidth)")
    println("maxWidth is \(maxWidth)")
}
println("cellWidth is \(cellWidth)")

答案 4 :(得分:1)

您无法在if语句中定义变量,然后在if之外使用它们。 if正文定义了一个范围,当if语句结束时,该范围内定义的所有内容都超出范围(意味着它不再可访问)。

如果你想在var cellWidth = 100 if notification.type == "vote"{ cellWidth -= 80 var otherCellWidth = 50 } println("cellWidth is \(cellWidth)") // cellWidth is 20 println("cellWidth is \(otherCellWidth)") // not possible because otherCellWidth is out of scope 内更改变量然后再使用它们,则需要在周围范围内声明它们。

<div id="contentPanelHeading" class="div">
    <label id="originalNameLabel" class="label">ThisIsAReallyLongBlockOfTextThatWillOverflowTheParentDiv</label>
</div>