天天看點

swift 可選型、拆包

//
//  ViewController.swift
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let company = companyName(companyName: "houston")
        // let newCompany = "i am working at " + company!
        if let tempString = company {
            let newCompany = "i am working at " + tempString
            print(newCompany)
        }
    }

    func companyName(companyName:String) -> String? {
        if companyName ==  "newYork" {
            return "newYork"
        }
        return nil
    }
}


/*

 OC下面代碼,可以編譯通過,但是運作時會出錯!因為company是空的。
 - (void)viewDidLoad {
 [super viewDidLoad];

 NSString * companyName = [self returnCompanyName:@"facebook"];
 NSString * myString = @"i am working in";
 NSString * message = [myString stringByAppendingString:companyName];
 }


 - (NSString*)returnCompanyName:(NSString*)companyName
 {
 if ([companyName isEqualToString:@"google"]) {
 return @"google";
 } else if ([companyName isEqualToString:@"apple"]){
 return @"apple";
 }
 return  nil;
 }

  swift中的可選型對象
  Swift語言設計的時候有很多安全方面的考慮,可選型表示了Swift是一門類型安全的語言,從上面的例子中你可以看到Swift中的可選型會在編譯時就去檢查某些可能發生在運作時的錯誤。
 上面舉例說明,Swift比OC安全
 ❤️String? 可選型類型,而不是string類型
 文法糖:表示可能為string類型,可能為nil

 let hasValue = company?.hashValue
 hasValue就是company拆包後的值(nil或者bool)

 ❗️❤️var name:String! : 類中的屬性
 在Swift中類在初始化的時候它的屬性必須都被初始化。
 如果你不想設定某個屬性的預設值的話,使用?把它加入可選鍊中

 ❗️拆包
 ()強制拆包,确信可選型有值的情況下
 let newCompany = "i am working at " + company!

 ()if - let結構的可選綁定來判斷一個變量是不是空值,進行拆包。

 if let tempString = company {
 let newCompany = "i am working at " + tempString
 print(newCompany)
 }



 */