2015-08-19 73 views
3

是否可以在Swift if语句中定义一个变量,然后在语句之外使用它?是否可以在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中的条件变量?

回答

2

不,你不能。 if语句定义了一个局部范围,所以无论你在其范围内定义了什么变量,都不能在其外部访问。

您有几种选择

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

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

func widthForCell(_ maxWidth: CGFloat, _ requiredWidth: CGFloat, _ notification: Notification) -> CGFloat { 
    switch notification.type { 
    case "vote": return maxWidth - 80 
    default: return requiredWidth 
    } 
} 
let cellWidth = widthForCell(maxWidth, requiredWidth, notification) 
println("cellWidth is \(cellWidth)") 
+0

谢谢!我更喜欢只使用常量的想法。 – Oakland510

2

而不是

var cellWidth = maxWidth - 80 

只需使用:

cellWidth = maxWidth - 80 

cellWidth已经if语句之外定义。

2

没有,但你可以之前定义它:

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

你可以把它,如果你不if语句的值将是什么之前知道一个可选值。

1

您不能在里面定义变量并在if语句中定义变量,然后在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 
2

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

你真正想要做的只是用修改if语句内现有cellWidth变量:

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 
相关问题