Swift 小技巧:用單邊區間優雅處理模糊范圍

進入正題之前先科普一下 Swift 區間的知識。
Swift 中的區間有兩種類型:閉區間和半開區間。

  • 閉區間:用 a...b 表示,包含 ab
  • 半開區間:用 a..<b 表示,包含 a 但不包含 b
舉個例子

想判斷一個數字是否在 0 到 100 之間,通常會這樣寫:

let number = 50
if number >= 0 && number <= 100 {print("在 0 到 100 之間")
}

但是這種寫法有點冗長,而且不夠優雅。
現在我們可以用區間來簡化這個判斷。

let number = 50
if (0...100).contains(number) {print("在 0 到 100 之間")
}
// or
if (0..<101).contains(number) {print("在 0 到 100 之間")
}

現在進入正題 “單邊區間(One-sided Range)”

1. 問題背景

需要實現一個簡單的評分系統,根據用戶評分的數值(如 App Store 中的打分)自動歸類為“差評”、“中評”或“好評”。評分是一個浮點數,范圍通常在 0 到 5 之間,分類邏輯如下:

  1. 小于 2.0 視為差評
  2. 介于 2.0 到 3.5(不含)之間為中評
  3. 大于等于 3.5 為好評

2. 常規解法

let score = 4.2if score < 2.0 {print("差評")
} else if score >= 2.0 && score < 3.5 {print("中評")
} else if score >= 3.5 && score <= 5.0 {print("好評")
} else {print("評分超出范圍")
}

3. 用單邊區間優雅處理

let score = 4.2guard (0.0...5.0).contains(score) else {print("非法評分")return
}switch score {
case ..<2.0:print("差評")
case 2.0..<3.5:print("中評")
case 3.5...:print("好評")
default:break
}

4. 常見使用場景舉例

  1. 年齡分組:
let age = 67switch age {
case ..<13:print("兒童")
case 13..<20:print("青少年")
case 20..<65:print("成年人")
case 65...:print("老年人")
default:break
}
  1. 溫度分類:
let temperature = 28switch temperature {
case ..<0:print("極寒")
case 0..<10:print("寒冷")
case 10..<25:print("涼爽")
case 25...35:print("溫暖")
case 35...:print("炎熱")
default:break
}
  1. 電量狀態
let batteryLevel = 18switch batteryLevel {
case ..<20:print("低電量")
case 20..<80:print("正常")
case 80...:print("高電量")
default:break
}

5. Swift Evolution 提案鏈接

SE-0172

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89045.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89045.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89045.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Tang Prime 20K板OV2640例程

準備用Tang Prime 20K開發板進行OV2640攝像頭采集驗證。 Tang Primer 20K是由開源硬件廠商SiPEED矽速科技推出&#xff0c;是一款以 GW2A-LV18PG256C8/I7 為主芯片的核心板&#xff0c;準備了 2 個擴展板&#xff0c;Dock 和 Lite。板卡包含有HDMI輸出&#xff0c;DVP接口&…

基于Anaconda環境開發IntelliJ IDEA實用JSON轉Java實體插件

在軟件開發中&#xff0c;將JSON數據轉換為Java實體類是常見需求。借助Anaconda環境強大的包管理能力與IntelliJ IDEA的插件開發體系&#xff0c;我們可以打造一款高效實用的JSON轉Java實體插件&#xff0c;顯著提升開發效率。下面將從需求分析、技術選型、開發實現到優化部署&…

idea運行到遠程機器 和 idea遠程JVM調試

一、idea運行到遠程機器 適用場景&#xff0c;本地連接不上遠程機器的部分組件&#xff0c;如&#xff1a;redis、數據庫。 缺點&#xff1a;每次修改程序&#xff0c;會復制所有的 依賴和class 啟動比較慢。 工作原理&#xff1a;遠程機器和本機器&#xff0c;都會啟動一個端口…

微信小程序接入騰訊云短信驗證碼流程

以下是針對 AA公司微信小程序接入騰訊云短信驗證碼 的 全流程操作指南&#xff0c;包含資質申請、簽名/模板配置、代碼對接的完整解決方案&#xff1a; 一、資質申請&#xff08;必須通過審核才能發短信&#xff09; 1?? 進入資質管理頁 路徑&#xff1a;騰訊云控制臺 → 短…

阿里云OSS文件上傳完整實現方案

一、前言 阿里云對象存儲服務(OSS)是一種海量、安全、低成本、高可靠的云存儲服務。本文將詳細介紹如何在Spring Boot項目中集成阿里云OSS實現文件上傳功能。 二、準備工作 1. 獲取OSS配置信息 在開始前&#xff0c;您需要準備以下OSS配置信息&#xff1a; endpoint: OSS服…

【軟考--軟件設計師】10.2 關系型數據庫

10 模式分解 分解 模式分解:將一個關系模式分解為多個子模式 模式分解就是模式規范化的工具&#xff0c;模式分解使用無損連接和保持函數依賴來衡量模式分解后是否導致原有模式中部分信息丟失。 無損連接 保持函數依賴 11、事務管理 事務的ACID性質: (1)原子性(Atomicit…

python訓練day44 預訓練模型

預訓練模型發展史 預訓練模型的訓練策略 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt# 設置中文字體支持 plt.rcParams["…

[論文閱讀]MISSRce

論文title: MISSRec: Pre-training and Transferring Multi-modal Interest-aware Sequence Representation for Recommendation

Redis學習筆記——黑馬點評 附近商鋪到UV統計 完結

前言&#xff1a; 今天完結了Redis的所有實戰篇。 學習收獲&#xff1a; GEO數據結構&#xff1a; GEO就是Geolocation的簡寫形式&#xff0c;代表地理坐標。Redis在3.2版本中加入對Geo的支持&#xff0c;存儲、管理和操作地理空間數據的特殊數據結構&#xff0c;它能高效處…

【客戶端排查】mac電腦怎么查看客戶端的實時運行日志

先退出客戶端&#xff1b;打開訪達里的應用程序&#xff1b; 打開【顯示包內容】&#xff1b; 找到MacOS 雙擊里面的終端程序&#xff1b; 雙擊后&#xff0c;客戶端會自動啟動&#xff0c;且可以在終端中查看客戶端的實時日志啦~

HarmonyOS NEXT倉頡開發語言實戰案例:健身App

各位好&#xff0c;今日分享一個健身app的首頁&#xff1a; 這個頁面看起比之前的案例要稍微復雜一些&#xff0c;主要在于頂部部分&#xff0c;有重疊的背景&#xff0c;還有偏移的部分。重疊布局可以使用Stack容器實現&#xff0c;超出容器范圍的偏移可以使用負數間距來實現&…

TreeMap源碼分析 紅黑樹

今天嘗試刨一下TreeMap的祖墳。 底層結構對比 先來看一下與HashMap、LinkedHashMap和TreeMap的對比&#xff0c;同時就當是復習一下&#xff1a; HashMap使用數組存儲數據&#xff0c;并使用單向鏈表結構存儲hash沖突數據&#xff0c;同一個沖突桶中數據量大的時候&#xff…

華為云Flexus+DeepSeek征文|基于Dify構建拍照識題智能學習助手

華為云FlexusDeepSeek征文&#xff5c;基于Dify構建拍照識題智能學習助手 一、構建拍照識題智能學習助手前言二、構建拍照識題智能學習助手環境2.1 基于FlexusX實例的Dify平臺2.2 基于MaaS的模型API商用服務 三、構建拍照識題智能學習助手實戰3.1 配置Dify環境3.2 配置Dify工具…

題解:CF2120E Lanes of Cars

根據貪心&#xff0c;不難想到每次會把最長隊伍末尾的那輛車移動到最短隊伍的末尾。但由于 k k k 的存在&#xff0c;會導致一些冗余移動的存在。設需要挪動 C C C 輛車&#xff0c;則怒氣值可以表示為 f ( C ) k C f(C) kC f(C)kC&#xff0c;其中 f ( C ) f(C) f(C) 是…

Excel基礎:選擇和移動

本文演示Excel中基礎的選擇和移動操作&#xff0c;并在最后提供了一張思維導圖&#xff0c;方便記憶。 文章目錄 一、選擇1.1 基礎選擇1.1.1 選擇單個單元格1.1.2 選擇連續范圍 1.2 行列選擇1.2.1 選擇整行整列1.2.2 選擇多行多列 1.3 全選1.3.1 全選所有單元格1.3.2 智能選擇…

Java面試寶典:基礎四

80. int vs Integer 維度intInteger類型基本數據類型(8種之一)包裝類默認值0null應用場景性能敏感場景(計算密集)Web表單、ORM框架(區分null和0)特殊能力無提供工具方法(如parseInt())和常量(如MAX_VALUE)示例:

RabbitMQ + JMeter 深度集成指南:中間件性能優化全流程解析!

在 2025 年的數字化浪潮中&#xff0c;中間件性能直接決定系統的穩定性和用戶體驗&#xff0c;而 RabbitMQ 作為消息隊列的“老大哥”&#xff0c;在分布式系統中扮演著關鍵角色。然而&#xff0c;高并發場景下&#xff0c;消息堆積、延遲激增等問題可能讓系統不堪重負&#xf…

uniapp image引用本地圖片不顯示問題

1. uniapp image引用本地圖片不顯示問題 在uniapp 開發過程中采用image引入本地資源圖片。 1.1. 相對路徑和絕對路徑問題 在UniApp中開發微信小程序時&#xff0c;引入圖片時&#xff0c;相對路徑和絕對路徑可能會有一些差異。這差異主要涉及到小程序和UniApp框架的文件結構、…

論文閱讀:arxiv 2025 ThinkSwitcher: When to Think Hard, When to Think Fast

總目錄 大模型安全相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 ThinkSwitcher: When to Think Hard, When to Think Fast https://arxiv.org/pdf/2505.14183#page2.08 https://www.doubao.com/chat/10031179784579842 文章目錄 速覽一、…

智能體記憶原理-prompt設計

智能體記憶的管理與設計開發分為以下幾步&#xff1a; 1.記憶的抽取&#xff1b; 2.記憶的存儲&#xff1b; 3.記憶的搜索&#xff1b; 一、記憶抽取一&#xff1a; FACT_RETRIEVAL_PROMPT f"""你是一位個人信息整理助手&#xff0c;專門負責準確存儲事實、用…