我想用來UIMenu創建一個類似選單的過濾器,該選單將從UIBarButtonItem
private func createFilteringMenu() -> UIMenu {
let fivePhotos = UIAction( title: "5", image: UIImage(systemName: "photo")) { [weak self] _ in
guard let this = self else { return }
this.fetchImages(limit: 5)
}
let tenPhotos = UIAction( title: "10", image: UIImage(systemName: "photo")) { [weak self] _ in
guard let this = self else { return }
this.fetchImages(limit: 10)
}
let twentyPhotos = UIAction( title: "20", image: UIImage(systemName: "photo")) { [weak self] _ in
guard let this = self else { return }
this.fetchImages(limit: 20)
}
let thirtyPhotos = UIAction( title: "30", image: UIImage(systemName: "photo")) { [weak self] _ in
guard let this = self else { return }
this.fetchImages(limit: 30)
}
let menuActions = [fivePhotos, tenPhotos, twentyPhotos, thirtyPhotos]
let addNewMenu = UIMenu( title: "Select number of photos", children: menuActions)
return addNewMenu
}
在我看來,這非常糟糕(重復代碼太多)。我想通過使用 forEach 來做到這一點:
private func createFilteringMenu() -> UIMenu {
let numberOfItems = [5, 10, 15, 20, 25, 30]
var menuActions: [UIAction] = []
numberOfItems.forEach{ index in
if index < numberOfItems.count {
let item = UIAction( title: "\(numberOfItems[index])", image: UIImage(systemName: "photo")) { [weak self] _ in
guard let this = self else { return }
this.fetchImages(limit: numberOfItems[index])
}
menuActions.append(item)
}
}
let addNewMenu = UIMenu( title: "Select number of photos", children: menuActions)
return addNewMenu
}
但當然它只是添加了最后一項(30),任何人都可以幫助我為每個專案(或類似的東西)添加所有專案。
太感謝了
uj5u.com熱心網友回復:
forEach為您提供值而不是索引。
因此不需要 if 條件,因為它實際上是在每次迭代中根據陣列長度檢查值
is 5 < 6 -> true
is 10 < 6 -> false
is 15 < 6 -> false
is 20 < 6 -> false
is 25 < 6 -> false
is 30 < 6 -> false
這就是為什么您的選單中只顯示一項
試試這個,看看它是否能解決你的問題。
private func createFilteringMenu() -> UIMenu {
var menuActions: [UIAction] = []
numberOfItems.forEach{ value in
let item = UIAction( title: "\(value)",
image: UIImage(systemName: "photo"))
{ [weak self] _ in
guard let this = self else { return }
this.fetchImages(limit: value)
}
menuActions.append(item)
}
return UIMenu(title: "Select number of photos",
children: menuActions)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424731.html
