LoginSignup
2
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-08-08

この記事の内容

個人的に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-
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2