是否可以在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中的条件变量?
答案 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>