Edited at

[Swift]プロトコル・列挙型・構造体・オプショナルバインディング


この記事の内容

個人的にSwiftの文法でとっつきにくい箇所を復習


コード例


sample.swift

import UIKit

// プロトコル
protocol ProductProtocol{
func show()
}

// 列挙型
// print(Product.Drink.rawValue)で"飲料品"と出力できる
enum ProductType:String{
case Drink = "飲料品"
case Food = "食料品"
case Book = "書籍"
case Other = "その他"
}

// 構造体
struct Product: ProductProtocol{
var name:String?
var price:Int?
var type:ProductType

init(_ name:String?, _ price:Int?, _ type:ProductType){
self.name = name
self.price = price
self.type = type
}

func show(){
// guardを利用したオプショナルバインディング
// (オプショナル型のデータをアンラップする)
guard let unwrappedName = self.name else{
return
}

guard let unwrappedPrice = self.price else{
return
}

print("商品名:\(unwrappedName)(\(self.type.rawValue)) 価格:¥\(unwrappedPrice)-")
}
}

// 継承は参照元の情報を更新する
// 構造体は参照元の情報を更新しない
// ProductType.Food は .Food とも書ける
var product1 = Product("商品1",1000,ProductType.Food)
var product2 = product1
product2.name = "商品2"
product2.price = 2000
product2.type = .Book

// nilが入った場合
var product3 = Product(nil,nil,.Other)

// show()を実行
product1.show()
product2.show()
product3.show() // show()のguard節内で処理が終了するため、出力されない



出力結果

商品名:商品1(食料品) 価格:¥1000-

商品名:商品2(書籍) 価格:¥2000-