Ios 快速将长代码转换为短代码
1.)我的团队负责人希望我使用闭包缩短这两个函数。我是一名新开发人员,无法找到缩短这些时间的正确方法Ios 快速将长代码转换为短代码,ios,swift,Ios,Swift,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 {
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
}
}
我非常感谢任何灵魂给予我的帮助:)首先,为
角色
创建常量,例如,使用枚举
:
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
}
}
现在,您的排序可以简化为:
let sortedMembers = members.sorted { $0.role < $1.role }
首先,为
角色
创建常量,例如,使用枚举
:
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
}
}
现在,您的排序可以简化为:
let sortedMembers = members.sorted { $0.role < $1.role }
通常最好从感谢那里得到反馈:)除非你真的有问题或者你的代码写得很糟糕。再读一遍你的问题,我会说你的代码不是模块化的,也许在这里发布也可以。通常最好是得到反馈,谢谢:)除非你真的有问题或者你的代码写得很糟糕。再读一遍你的问题,我会说你的代码不是模块化的,也许可以在这里发布。你不也需要实现Equalable协议吗?或者这不适用于枚举?^^我喜欢的原因swift@Honey没有关联值的枚举会自动合成与
哈希表
(因此也是相等的
)的一致性。@Hamish hmmm。我刚刚编写了一个关联类型为Int
的枚举。通过使用=
在两个枚举中,我能够验证它是否符合Equatable,但即使Int
(它的关联类型也不符合comparable)。这是否意味着您的注释不正确?@Honey您是指类型为Int
的原始值?我的注释是正确的,正如我所说的Hashable
(只需要hashValue
属性+equalable
一致性),而不是compariable
。编译器不会自动合成compariable
一致性,因为您可能不希望它只比较原始值(例如在本例中).您不也需要实现可均衡协议吗?或者这不适用于枚举吗?^^我喜欢的原因swift@Honey没有关联值的枚举自动合成与哈希表
的一致性(因此也是相等的
)@Hamish hmmm。我刚刚编写了一个关联类型为Int
的枚举。通过在两个枚举上使用!=
,我能够验证它是否符合equalable,但即使Int
(其关联的类型确实如此。这是否意味着您的注释不正确?@亲爱的,您是指类型为Int
的原始值?我的注释是正确的,正如我所说的Hashable
(这只需要hashValue
属性+equalable
一致性),而不是可比性
。编译器不会自动合成可比性
一致性,因为您可能不希望它只是比较原始值(例如在本例中)。