2017-10-13 18 views
0

比方說,我有覆蓋此功能,並在它的身上我沒有默認值定義的屬性爲什麼我們不必在函數體內提供屬性默認值?

let identifier: String 

爲什麼迅速讓我跳過此屬性提供默認值?

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let identifier: String 
    if indexPath.item == 1 { 
     identifier = trendingCellId 

    } else if indexPath.item == 2 { 
     identifier = subscriptionCellId 
    } else { 
     identifier = cellId 
    } 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath) 

      return cell 
} 
+0

另請參閱https://stackoverflow.com/a/28444671/1187415。 –

回答

0

當您在Swift中聲明變量時,不需要提供值 您可以隨時在代碼中分配值。 你應該嘗試訪問它之前做到這一點,否則:

  • 非可選變量:你得到一個運行時錯誤。
  • 可選變量:你得到零。
+0

「*因爲否則它是NULL *」 - 不,它是未初始化的;該值是未定義的。但編譯器會阻止您在初始化之前訪問變量,因此這不是真正的問題。 – Hamish

+0

這個答案的措辭是混淆和誤導。第一句應該說明*「在Swift中聲明變量時不需要提供值」*。初始化是將第一個值分配給變量的動作。因此,在初始化變量時聲明不需要提供值是沒有意義的。如果您嘗試訪問未初始化的變量,則不會獲得「NULL」。相反,你會得到一個編譯器錯誤。 – rmaddy

+0

你是對的,@rmaddy。我改變了我的句子。 – Akaino

1

重要的是,您已給變量一個類型,並且您在下一行中初始化該值。因此該聲明是合法的。

這種結構稱爲「條件初始化」,允許您根據具體情況(條件)對變量進行初始化。這是一個非常有用的功能,即使對於一個常量也是合法的。

+0

在我的討論覆蓋在這裏:http://www.apeth.com/swiftBook/ch03.html#_variable_declaration – matt

+0

非常感謝你!所以如果我不會使用這個屬性(但無論什麼原因你把這個字符串(讓標識符:字符串))它證明是合法的? –

2

一切都很好,因爲您在使用前初始化它。 if,else ifelse正在初始化該屬性。你刪除else部分,然後編譯器會顯示錯誤。

相關問題