2015-08-19 105 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 
相關問題