gpt4 book ai didi

ios - Swift 将长代码转换为短代码

转载 作者:搜寻专家 更新时间:2023-11-01 05:52:43 24 4
gpt4 key购买 nike

1.)我的团队领导希望我使用闭包来缩短这两个功能。我是一名新开发人员,无法找出缩短这些的正确方法。

func sortUsers() {
var sorted = [Member]()
var sortedObjects = [PFObject]()

for j in 0...2 {
if member.count > 0 {
for i in 0...member.count - 1 {
if j == 0 {
if member[i].role == "OWNER" {
sorted.append(member[i])
sortedObjects.append(memberObject[i])
}
} else if j == 1 {
if member[i].role == "ADMIN" {
sorted.append(member[i])
sortedObjects.append(memberObject[i])
}
} else {
if member[i].role == "USER" {
sorted.append(member[i])
sortedObjects.append(memberObject[i])
}
}
}
}
}
member = sorted
memberObject = sortedObjects

}

几乎可以通过使用这个闭包来缩短。 member.sort {$0.role < $1.role }但是它会按字母顺序缩短,这没关系,但我需要所有者始终排在第一位。

2.) 这第二个功能我还没有想出任何东西。它有我们一直在做的方式,然后在其中有一个闭包,我尝试用它替换更长的方法,但它没有用。

    func filterUsers() {
sortUsers()
switch roleSelector.selectedSegmentIndex {
case 0:
filtered = member
filteredObjects = memberObject
tableView.reloadData()
case 1:
filtered = []
filteredObjects = []
for i in 0...member.count - 1 {
if member[i].role == "OWNER" {
filtered.append(member[i])
filteredObjects.append(memberObject[i])
}
}
tableView.reloadData()
case 2:
member.filter { $0.role == "ADMIN" }
tableView.reloadData()
case 3:
filtered = []
filteredObjects = []
for i in 0...member.count - 1 {
if member[i].role == "USER" {
filtered.append(member[i])
filteredObjects.append(memberObject[i])
}
}
tableView.reloadData()
default:
break
}
}

我非常感谢任何善良的灵魂可能提供给我的任何帮助:)

最佳答案

首先,为 Role 创建常量,例如,使用 enum:

enum Role : String {
case owner = "OWNER"
case admin = "ADMIN"
case user = "USER"
}

现在让我们声明角色的顺序:

extension Role : Comparable {
var order: Int {
switch self {
case .owner:
return 0
case .admin:
return 1
case .user:
return 2
}
}

static func < (lhs: Role, rhs: Role) -> Bool {
return lhs.order < rhs.order
}
}

假设 Member 看起来像这样(注意我使用了我的 Role 枚举而不是你的 String)。

class Member : CustomDebugStringConvertible {
var role: Role
var name: String

init(role: Role, name: String) {
self.role = role
self.name = name
}

var debugDescription: String {
return self.name
}
}

let members: [Member] = [
Member(role: .user, name: "user1"),
Member(role: .owner, name: "owner"),
Member(role: .user, name: "user2"),
Member(role: .admin, name: "admin2"),
Member(role: .admin, name: "admin2"),
]

现在您的排序可以简化为:

let sortedMembers = members.sorted { $0.role < $1.role }

要将两个数组一起排序,例如,我们可以创建对成员对象并对这些对进行排序:

let pairs = zip(members, objects)
let sortedPairs = pairs.sorted { $0.0.role < $1.0.role }

let sortedMembers = sortedPairs.map { $0.0 }
let sortedObjects = sortedPairs.map { $0.1 }

为了获取过滤后的对象,让我们再次使用角色进行简化:

if roleSelector.selectedSegmentIndex == 0 { // all selected
filtered = member
filteredObjects = memberObject
tableView.reloadData()
return
}

let roles: [Role] = [.owner, .admin, .user]
let role = roles[roleSelector.selectedSegmentIndex - 1]

filtered = members.filter { $0.role == role }

tableView.reloadData()

关于ios - Swift 将长代码转换为短代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com