Generics 使用Swift中的Equatable将对象作为属性进行比较

Generics 使用Swift中的Equatable将对象作为属性进行比较,generics,if-statement,swift,control-flow,iequatable,Generics,If Statement,Swift,Control Flow,Iequatable,AMRoute类有两个属性,即AMCity类类型的city1和city2。 许多AMRoutes存储在一个数组arrayOfRoutes中。 创建新路线时,我首先需要确保两个给定城市不存在任何路线 我很难翻译这段Obj-C代码: -voidcreateRouteFromCity:AMCity*城市1到城市:AMCity*城市2{ BOOL routeExists = NO; for (AMRoute *route in self.arrayOfRoutes) { if (((route.

AMRoute类有两个属性,即AMCity类类型的city1和city2。 许多AMRoutes存储在一个数组arrayOfRoutes中。 创建新路线时,我首先需要确保两个给定城市不存在任何路线

我很难翻译这段Obj-C代码:

-voidcreateRouteFromCity:AMCity*城市1到城市:AMCity*城市2{

BOOL routeExists = NO;
for (AMRoute *route in self.arrayOfRoutes) {
    if (((route.city1 == city1) && (route.city2 == city2)) || ((route.city2 == city1) && (route.city1 == city2))) {
        routeExists = YES;
    }
}

我的理解是,我不能像在Obj-C中那样使用“==”运算符来比较对象。我在搜索主题时找到的示例将我指向泛型:

    func createRoute(city1: AMCity, city2: AMCity) {
    
    var routeExists = false
    
    findIndex(self.arrayOfRoutes, valueToFind: <#T#>) //i am not sure how to call this?        
    for route:AMRoute in self.arrayOfRoutes {
    println("The city is: \(route.city1.name)")
        
    }
    
}

func findIndex<T: Equatable>(array: [T], valueToFind: T) -> Int? {
    for (index, value) in enumerate(array) {
        if value == valueToFind {
            return index
        }
    }
    return nil
}

我不知道如何在我的例子中合并它。我不需要比较数组中的AMRoute对象。我需要比较作为AMRoute、city1和city2属性存储的对象作为AMCity对象。

您可以使用===相同运算符在swift中比较对象。

您可以使用===相同运算符在swift中比较对象。

I这是我的理解,我不能使用“==”操作符来比较对象,就像我以前在Obj-C中使用的那样。只有当该类型没有==操作符时,这才是正确的。我的理解是,我不能使用“==”操作符来比较对象,就像我以前在Obj-C中使用的那样。只有当该类型没有==操作符时,这才是正确的。