Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 快速将长代码转换为短代码_Ios_Swift - Fatal编程技术网

Ios 快速将长代码转换为短代码

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 {

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
一致性),而不是
可比性
。编译器不会自动合成
可比性
一致性,因为您可能不希望它只是比较原始值(例如在本例中)。