SwiftUI RandomAccessCollection 是什么如何用(2020)
SwiftUI RandomAccessCollection 是什么如何用(2020)
得益于Swift的protocol-oriented 設計,因此可以非常容易的實現各種通用算法。
RandomAccessCollection 介紹
A collection that supports efficient random-access index traversal.
支持高效隨機訪問的集合
RandomAccess集合可以將索引移動到任意距離,并可以在O(1)復雜度時間內從了索引之間的距離。因此隨機訪問與雙向訪問之間區別就在于索引移動效率。例如,在O(1)時間內就可以額隨機訪問count屬性,而不需要迭代整個集合。
實際應用
RandomAccessCollection 可以應用在List分頁項目中,我將在后續教程中進行介紹。
import UIKit
import Foundation
import SwiftUI
extension RandomAccessCollection where Self.Element: Identifiable {
public func isLastItem<Item: Identifiable>(_ item: Item) -> Bool {
guard !isEmpty else {
return false
}
guard let itemIndex = lastIndex(where: { AnyHashable($0.id) == AnyHashable(item.id) }) else {
return false
}
let distance = self.distance(from: itemIndex, to: endIndex)
return distance == 1
}
public func isThresholdItem<Item: Identifiable>(offset: Int,
item: Item) -> Bool {
guard !isEmpty else {
return false
}
guard let itemIndex = lastIndex(where: { AnyHashable($0.id) == AnyHashable(item.id) }) else {
return false
}
let distance = self.distance(from: itemIndex, to: endIndex)
let offset = offset < count ? offset : count - 1
return offset == (distance - 1)
}
}
struct DemoItem: Identifiable {
let id = UUID()
var sIndex = 0
}
let items:[DemoItem] = Array(0...10).map { DemoItem(sIndex: $0) }
items.isLastItem(items[0])
items.isLastItem(items[10])
效果
參考文獻
更多SwiftUI教程和代碼關注專欄
- 請關注我的專欄 SwiftUI教程與源碼
智能推薦
SwiftUI 如何實現HStack非對稱居中
一、實戰需求 希望手動實現類型導航條的組件,其中title本部分要居中,按鈕要靠右側。這個需求該如何實現。 二、解決方案 目前可以有一下幾個方案L: 通過占位方式解決 通過ZStack實現 三、實戰代碼 1、通過占位實現 2、通過ZStack解決 技術交流 QQ:3365059189 SwiftUI技術交流QQ群:518696470...
SwiftUI APP如何取代AppDelegate和SceneDelegate
SwiftUI是構建應用程序的好方法。簡單,簡潔,快速。可以用一半的代碼行在SwiftUI中重新創建UIKit中的內容。以前需要數周才能完成的工作現在只需幾個小時。但是直到今天,它還是有一個嚴重的缺點:它依賴于UIKit。 要顯示使用SwiftUI創建的視圖,您必須將其包裝在UIHostingController中,該包裝必須包裝在UIWindow中,而UIWindow必須在SceneDelega...
SwiftUI,AlignmentGuide,alignmentGuide能干什么,alignmentGuide是什么,.alignmentGuide
寫在前面 您點進來可能是想要了解SwiftUI中alignmentGuide相關的東西,本文 翻譯再創作自swiftui-lab,侵刪。 您可以查看英文原版: https://swiftui-lab.com/alignment-guides/ ?:翻譯過程中對alignment保持了英語,可以翻譯成對齊,目的為了和我們常說的“對齊”區分,alignmentGuide可以翻譯...
@states ,@Binding,ObservableObject,@ObservedObject,@EnvironmentObject 分別是什么意思?SwiftUI數據傳遞
您可以在github上查看:https://github.com/qizhemotuosangeyan/blog @states @Binding ObservableObject,@ObservedObject @EnvironmentObject 分別是是什么 急性子可以直接跳到最后看總結——不過我相信你會回來從頭再看的: ) 前置任務:屬性包裝器(propertyWr...
猜你喜歡
SwiftUI 基礎之@ObservedObject 有什么用(含demo代碼2020)
SwiftUI 基礎之@ObservedObject 有什么用(含demo代碼2020) @ObservedObject 簡介 很遺憾,也許這個屬性裝飾器實在太新了,apple官方還沒有給具體定義 ObservedObject 大白話:觀測對象修飾器,被ObservedObject修飾的變量只要有變化就會自動更新 @State 和 @ObservedObject 有什么區別 @State用于Vie...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...