tags: 釣魚術 SwiftUI
開發筆記
- 學習 
Swift 的第一週,感覺好像正在進行隕石式開發...真的芭比Q惹
 
- 昨天去吃喜酒,第一次去福華...吃了好多好多海鮮(好奢侈),今天頭好暈,希望不是確診...
 
- 由於魚種眾多,資料量也不少,處理圖片有點麻煩,我打算一天做一點。
 
實作部分
踩雷
- 根據 Figma 畫出的樣子,處理好 
FishRect 的樣式區塊後,接著我預計根據不同魚的分類 fishCategory 去區隔
- Array 的 ForEach ... 那個 
continue 不會用,來看看文件
 
- 連結:https://developer.apple.com/documentation/swift/array/foreach(_:)
 
- 上面寫 You cannot use a break or continue statement ...
 
 
- 原本想說用一個回圈掃一次所有的魚,統計一下有哪些魚魚家族,不過這塊我先跳過;我先手動產生魚魚家族的名單在 
ToxicFish.swift ... 
swift 限制 / 參考資料
- 
彼得潘的 iOS App Neverland - 程式寫錯地方的 Expressions are not allowed at the top level 和 Expected declaration
 
- Stack Overflow - Array not contains 的用法
 
ToxicFish.swift source code
//
//  ToxicFish.swift
//  BaoAnGongFisher
//
//  Created by nipapa on 2022/9/9.
//
import Foundation
struct FishRect: Hashable {    // 放置魚資訊的方塊
    var fishName:String    // 魟、虎、沙毛、斑午、象耳、倒吊
    var fishCategory:String    // 魟
    var fishNickName:[String]    // 赤魟
    var imageName:String {return fishName}    // 赤土魟 ...
}
var toxicFishesData = [
    FishRect(fishName: "赤魟", fishCategory: "魟", fishNickName: ["赤土魟", "紅魴魚", "牛尾魴"]),
    FishRect(fishName: "黃魟", fishCategory: "魟", fishNickName: ["笨氏土魟", "黃魴", "紅魴"]),
    FishRect(fishName: "花身鯻", fishCategory: "斑午", fishNickName: ["花身雞魚", "花身仔", "雞仔魚", "斑午"]) // 花身鯻
]
var fishCates = ["魟", "斑午"]
ToxicFishViewList.swift source
//
//  ContentView.swift
//  BaoAnGongFisher
//
//  Created by nipapa on 2022/9/7.
//
import SwiftUI
struct ToxicFishListView: View {
    var toxicfishes = toxicFishesData
    
    var body: some View {
        VStack{
            // Top Bar
            HStack{
                Text("危險魚類")
                    .padding()
                    .font(.title)
                    .frame(alignment: .topLeading)
                    //.background(Color(hue: 0.555, saturation: 1.0, brightness: 1.0, opacity: 0.21))
                Spacer()
            }.background(Color(hue: 0.555, saturation: 1.0, brightness: 1.0, opacity: 0.21))
            
            ForEach(fishCates, id: \.self) { fishCate in
                VStack {
                    HStack {    // Category name / spacer
                        Text(fishCate)
                          .frame(width: 50, height: 15, alignment: .leading)
                          .background(Color(hue: 0.555, saturation: 1.0, brightness: 1.0, opacity: 0.21))
                        Spacer()
                    }
                    
                    List(toxicfishes, id: \.self) { toxicfish in
                        // Fish Rectangle
                        if toxicfish.fishCategory == fishCate {
                            HStack {    // 有毒的魚,會以水平方式堆疊其他元件
                                // 最左邊放一張圖片
                                Image(toxicfish.imageName)
                                // 放一個垂直堆疊
                                VStack {
                                    // 魚的名字
                                    Text(toxicfish.fishName)
                                        .font(.headline)
                                        .fontWeight(.bold)
                                    // 魚的俗名,把 [String] join 成一個大的字串
                                    Text(toxicfish.fishNickName.joined(separator: "、 "))
                                }
                                // 塞 Spacer 填滿
                                Spacer()
                            }
                        }
                    }
                }
            }
        }
    }
}
struct ToxicFishListView_Previews: PreviewProvider {
    static var previews: some View {
        ToxicFishListView()
        ToxicFishListView()
            .preferredColorScheme(.dark)
    }
}

心得
- 覺得排版還是長得不太好看
 
- 暫時標上底色可以協助我去辨認該元件的大小,或許對於習慣開發的人來說這有點蠢XD