var ss: String? = "hello"
// 方式一 !强制解包
if ss != nil {
print(ss!) // 执行到这里 一定有值
}
// 方式二 加一个?
var aa = ss?.uppercased() // 执行到这里 aa 可能有值,也可能没有值, 但是不会报错
// 方式三 if let
if let ss = ss {
print(ss) // ss 一定有值
}
if let ss = ss?.uppercased() {
print(ss)
}
// 方式四 ??
let bb = ss ?? "hi" // bb一定有值
// 方式五 guard let
let dd : String? = "hello"
guard let qq = dd else {
return
}
// 执行到之处 qq 一定有值
print(qq)
隐士可选性使用示例
class City
{
let cityName: String
var country: Country
init(cityName: String, country: Country) {
self.cityName = cityName
self.country = country;
}
}
class Country
{
let countryName: String
var capitalCity: City! // 这里的 City! 是隐士可选性
init(countryName: String, capitalCity: String)
{
self.countryName = countryName
// 这里传的参数self(Country)还没创建完成,所以City也没有被创建出来, 就会造成上面的City可能是空, 所以需要 隐士的可选性形式 表示类型
self.capitalCity = City(cityName: capitalCity, country: self)
}
func showInfo()
{
print("This is \(countryName).")
print("The capital is \(capitalCity.cityName).")
}
}
Country(countryName: "China", capitalCity: "beijing").showInfo()