contains

.contains(物件)為真,卻沒有被執行?Why ? contains .contains(物件)為真,卻沒有被執行?Why ? AI解釋:在您提到的情況下,當您按下 IconButton 時,favorites 列表中已經包含了該 Movie 物件,但是在第 161 行的 else 塊中的代碼沒有被執行。這可能是因為在第 160 行中,您使用了 contains 方法來檢查 favorites 列表中是否包含該 Movie 物件,但是 contains 方法是基於 == 運算符來比較兩個對象是否相等的。如果您的 Movie 類沒有實現 == 運算符,則 contains 方法將無法正確地比較兩個 Movie 物件是否相等。 為了解決這個問題,您可以在 Movie 類中實現 == 運算符,以便在比較兩個 Movie 物件時使用。 最後在movie.dart加上這段解決

January 1, 2024 · 1 分鐘 · Peter

解決 macOS 上 Rollup rollup.darwin-arm64.node 模組錯誤與 Gatekeeper 阻擋問題

前言 使用 Apple Silicon Mac 開發前端專案時,你有沒有遇過這種情況:npm install 明明成功了,但執行 npm run dev 時 Vite 卻突然翻臉不認人,噴出一堆關於 rollup.darwin-arm64.node 的錯誤? 更慘的是,macOS 還會彈出一個視窗說「無法打開 rollup.darwin-arm64.node,因為無法驗證開發者」——彷彿你的電腦在暗示你下載了什麼奇怪的東西。 別擔心,這不是你的問題(好吧,也不完全是 Apple 的問題),而是 npm + Gatekeeper 的經典組合技。本文將帶你徹底理解並解決這個惱人的問題。 問題現象 當你在 Apple Silicon Mac 上執行 Vite/Rollup 專案時,可能會遇到以下錯誤: 錯誤 1:模組找不到 Error: Cannot find module '@rollup/rollup-darwin-arm64' Require stack: - /project/node_modules/rollup/dist/native.js 錯誤 2:系統策略拒絕載入 Error: dlopen(/project/node_modules/@rollup/rollup-darwin-arm64/rollup.darwin-arm64.node, 0x0001): code signature in (...) not valid for use in process: library load disallowed by system policy 錯誤 3:Gatekeeper 彈窗警告 macOS 直接彈出視窗:「無法打開 rollup.darwin-arm64.node,因為無法驗證開發者」 ...

January 1, 2024 · 2 分鐘 · Peter

iOS : 記憶體管理

在iOS app中,記憶體管理是基於引用計數模型運作。當創建一個物件的時候,記憶體會在Heap(堆)上分配,並將其引用計數設置為1。隨著其他物件對此物件建立強引用(strong reference),其引用計數會增加1。 iOS : 記憶體管理 在iOS app中,記憶體管理是基於引用計數模型運作。當創建一個物件的時候,記憶體會在Heap(堆)上分配,並將其引用計數設置為1。隨著其他物件對此物件建立強引用(strong reference),其引用計數會增加1。 相反的,如果擁有物件的持有者放棄了強引用,引用計數將會減少1。一旦引用計數變為0,該物件的記憶體就會被自動釋放。 當啟用了ARC(Automatic Reference Counting)自動引用計數功能的編譯器編寫程式碼時,編譯器會分析你創建的引用,並自動插入對底層記憶體管理機制的調用,我們無須手動設置引用計數。 隨著自動引用計數(ARC)的引入,我們只需要在引用物件時指定所有權的類型: 強引用(strong reference):確保被引用的物件只要引用仍然有效,就會一直保留在記憶體中。例如,我們宣告一個控制器屬性 strong var myView: UIView,表示控制器強引用 myView 物件,直到控制器釋放之前,myView 都會存在記憶體中。 弱引用 (weak reference):對被引用的物件的生存期沒有影響。例如,我們宣告一個閉包中的局部變數 weak var capturedView: UIView,表示閉包弱引用 capturedView 物件,即使 capturedView 被釋放,閉包中的 capturedView 也會變成 nil 而不會崩潰。 非擁有引用 (unowned reference):與弱引用類似,對被引用的物件的生存期沒有影響,但與弱引用的不同之處是,非擁有引用 預期總是擁有 「非 nil 的值」,**ARC 不會自動將其設置為 ****nil**。例如,我們宣告一個子視圖中的屬性 unowned var parentViewController: UIViewController,表示子視圖非擁有引用父控制器,而父控制器通常擁有比子視圖更長的生存期,因此子視圖可以安全地訪問父控制器。 需要注意的是: 當被引用的物件被釋放時,弱引用會被設定為 nil,而非擁有引用則會變成一個懸浮指標 (dangling pointer)。向懸浮指標發送訊息會導致程式崩潰。 使用非擁有引用時,要確保另一個物件擁有相同的或更長的生存期,避免懸浮指標問題。 簡單來說,在以下情況下使用不同的引用類型: strong: 當你想要確保物件一直存在,直到不再需要它為止; weak: 會在被引用的物件被釋放時自動設為 nil,因此它們可以用來避免循環引用。例如,在代理關係中,委托者通常會使用弱引用來引用代理,這樣當委托者被釋放時,代理也不會被保留。; unowned: 不會在被引用的物件被釋放時自動設為 nil,因此它們只能用於指向那些生命週期一定會比引用它的物件長的物件。例如,子視圖可以使用非擁有引用來引用父視圖,因為父視圖通常會比子視圖存在得更久。 assign: 當你只需要一個指向簡單數據的指標,不需要跟踪它的生命周期。 使用 weak 和 assign 引用可以避免循環引用,即兩個物件互相引用導致彼此都無法被釋放的情況。 ...

December 20, 2023 · 2 分鐘 · Peter

VSCode 顯示隱藏資料夾

打開設定(Settings) VSCode 顯示隱藏資料夾 打開設定(Settings) 在設定畫面右上角點擊“Open Settings按鈕” 添加設置: 存檔,從新啟動VSCode,就可以看到 . 開頭的資料夾

November 14, 2023 · 1 分鐘 · Peter

iOS中的associated type和associated value是不同的概念

它們在使用和用途上有很大的區別。讓我們來解釋這兩者之間的差異: iOS中的associated type和associated value是不同的概念 它們在使用和用途上有很大的區別。讓我們來解釋這兩者之間的差異: 是的,iOS中的associated type和associated value是不同的概念,它們在使用和用途上有很大的區別。讓我們來解釋這兩者之間的差異: Associated Type(關聯類型): Associated type是Swift中協議(protocols)的一個特性。 關聯類型允許在定義協議時指定一個或多個類型,但不需要提供具體的實現。 具體遵循(conforming)該協議的類別或結構體需要提供關聯類型的具體實現。 關聯類型使協議更具通用性,因為它可以適應不同的類型。 protocol OrderQueue { associatedtype Order // 定義一個關聯類型 mutating func enqueue(_ order: Order) mutating func dequeue() -> Order? } struct OrderQueueImplementation: OrderQueue { // 實現OrderQueue協議,指定關聯類型為OrderStatus typealias Order = OrderStatus private var orders: [OrderStatus] = [] mutating func enqueue(_ order: OrderStatus) { orders.append(order) } mutating func dequeue() -> OrderStatus? { return orders.isEmpty ? nil : orders.removeFirst() } } ...

October 27, 2023 · 1 分鐘 · Peter

搜尋目錄下每一個檔案的特定字/檔案名稱

在開發過程中,我們常需要快速找出「哪個檔案用到了這個變數?」或是「那個設定檔到底放在哪裡?」。 本文整理了 Linux/Mac 終端機中最常用的搜尋指令:grep、ag 和 find。 1. 搜尋檔案內容 (grep) grep 是系統內建最強大的文字搜尋工具。 常用指令 # 在目前目錄 (./) 遞歸搜尋 "R2" grep -rwn --color=auto ./ -e 'R2' 參數詳解 -r (recursive):遞歸搜尋,包含所有子目錄。 -w (word):僅匹配「完整單字」,避免匹配到部分字串(例如搜尋 is 不會匹配到 this)。 -n (line number):顯示行號。 -e (pattern):指定搜尋的關鍵字。 --color=auto:將關鍵字高亮顯示。 顯示前後文 (Context) 有時候只看一行不夠,我們需要看前後幾行程式碼: # -C (Context): 顯示前後各 1 行 grep -rwn -C 1 ./ -e 'R2' # -A (After): 顯示後 1 行 # -B (Before): 顯示前 1 行 2. 更快的選擇:The Silver Searcher (ag) grep 雖然強大,但速度較慢且指令較長。ag 是一個專為程式碼搜尋設計的工具,速度極快且預設忽略 .gitignore 的檔案。 (需額外安裝:brew install the_silver_searcher) ...

September 23, 2023 · 1 分鐘 · Peter

iOS如何把專案打包framwork後也讓原本的pod/套件包入framework ?

工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯. iOS如何把專案打包framwork後也讓原本的pod/套件包入framework ? 工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯. 假設你的專案叫”B”,打包的framework取名為BPack,那麽在Podfile的部分要加入framework自己的套件引用,原本的專案裝什麼pod,framework如果有用到該套件也要跟著裝,以SnapKit為例,作法如下: target ‘B’ do Comment the next line if you don’t want to use dynamic frameworks use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’ Pods for B end target ‘BPack’ do Comment the next line if you don’t want to use dynamic frameworks use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’ Pods for B Pods for BPack end另外,在Build Setting的部分好像也要做一下設定: 如果你包的是動態庫,那麽在framework target的Build Settings: Linking -> Mach-O Type應該要選擇:Dynamic Libray Mach-O這部分不太確定有沒有影響,不過我這樣選是可以Run App Successful. 有錯麻煩請指正,感謝! ...

September 22, 2023 · 1 分鐘 · Peter

面試必考:OSI 7層模型完全指南 - 從記憶口訣到實戰應用

前言:為什麼 OSI 7層是面試必考題? 在網路相關的技術面試中,OSI 7層模型幾乎是必考題。不論你是應徵後端工程師、DevOps、網路工程師,還是全端開發者,面試官都可能問:「請說明 OSI 7層模型」、「HTTP 在哪一層?」、「TCP 和 UDP 的差異?」 理解 OSI 7層模型不僅是為了應付面試,更是因為: 🔍 除錯網路問題:知道問題出在哪一層,才能對症下藥 🏗️ 設計系統架構:理解各層職責,設計出更好的系統 📡 優化網路效能:知道瓶頸在哪一層,才能有效優化 🛡️ 網路安全防護:不同層有不同的安全考量 本文涵蓋內容 記憶口訣:個人心法,快速記住 7 層順序 每層詳解:功能、協定、實際應用 封包傳輸流程:資料如何在各層之間流動 TCP/IP 對應:實務上常用的 4 層模型 面試常見問題:15+ 個經典面試題與解答 實戰經驗:除錯技巧與常見陷阱 快速記憶:P.D.N.T. S.P.A. 口訣 個人心法 記住每層的首位字母,組成縮寫:P.D.N.T. S.P.A. 口訣:有三個人(‘P’hy. ‘D’a. ‘N’et.)去(‘T.’: 想成 To)‘S.’ ‘P.’ ‘A.’ P - Physical (實體層) D - Data Link (資料連結層) N - Network (網路層) T - Transport (傳輸層) --- S - Session (會議層) P - Presentation (表現層) A - Application (應用層) 其他常見記憶法 英文口訣: ...

August 20, 2023 · 9 分鐘 · Peter

MacOS[祕技] Dock的隱藏與顯示

如果 Dock 有開啟自動隱藏的話,我們可以透過終端機指令把動畫效果關掉,讓操作更順暢。除此之外,還有許多不為人知的 Dock 隱藏祕技,這篇文章將一次整理給你! MacOS [祕技] Dock 的隱藏與顯示與更多隱藏技巧 桌面與Dock選項裡面可以找到 1. 加速 Dock 的顯示與隱藏 預設的 Dock 在自動隱藏時會有一個滑入滑出的動畫,如果你希望它反應更快,可以使用以下指令。 桌面與 Dock 選項裡面可以找到在終端機下指令: 消除顯示延遲 當你把滑鼠移動到螢幕邊緣時,Dock 通常會等待一小段時間才開始浮現。這個指令可以將延遲設為 0,讓 Dock 隨傳隨到。 defaults write com.apple.dock autohide-delay -float 0; killall Dock 加速動畫效果 除了消除延遲,你還可以加速(或移除)動畫本身的滑動時間。 defaults write com.apple.dock autohide-time-modifier -int 0; killall Dock 設為 0 表示瞬間顯示,沒有動畫。如果你覺得太快,也可以設為 0.5(預設值約為 1)。 還原設定 如果想恢復原狀,請執行: defaults delete com.apple.dock autohide-delay defaults delete com.apple.dock autohide-time-modifier killall Dock 2. 在 Dock 加入空白分隔線 (Spacer) 覺得 Dock 上的應用程式太擁擠,想要分門別類嗎?雖然 macOS 不允許直接拖曳空白,但我們可以透過指令加入「隱形的分隔線」。 ...

August 4, 2023 · 2 分鐘 · Peter

Xcode Hotkey

在 iOS 開發過程中,熟練使用 Xcode 快捷鍵是提升效率的關鍵。與其不斷地在滑鼠與鍵盤間切換,不如讓手指留在鍵盤上,像彈鋼琴一樣流暢地寫程式。 以下是我整理的 Xcode 必備快捷鍵速查表: 🚀 導航與跳轉 (Navigation) 最常用的功能,讓你快速在檔案與編輯器之間穿梭。 功能 快捷鍵 說明 快速開啟檔案 Cmd + Shift + O 最強大功能! 輸入檔名快速跳轉 (Open Quickly) 定位檔案位置 Cmd + Shift + J 在左側 Project Navigator 中選中目前編輯的檔案 跳轉到編輯器 Cmd + J 聚焦到編輯器區域,並可選擇開啟位置 顯示呼叫階層 Cmd + Ctrl + Shift + H Show Call Hierarchy,查看誰呼叫了這個方法 全域搜尋 Cmd + Shift + F Find in Workspace,搜尋整個專案 🖥 視窗與介面 (Interface) 快速開關不需要的面板,爭取最大的程式碼閱讀空間。 功能 快捷鍵 說明 開/關 導航面板 Cmd + 0 左側 Navigator (Project, Search, Git…) 開/關 檢查器 Cmd + Option + 0 右側 Inspector (Attributes, Identity…) 開/關 除錯區 Cmd + Shift + Y 下方 Debug Area 開新分頁 Cmd + T 開啟新的 Tab 開新視窗 Cmd + Option + T 開啟全新的 Xcode 視窗 📝 編輯與除錯 (Editing & Debugging) 寫程式時的得力助手。 ...

July 26, 2023 · 1 分鐘 · Peter