Проверка, если объект не типа в Swift - PullRequest
0 голосов
/ 17 февраля 2019

Мне нужно проверить, не относится ли объект к определенному типу.Я знаю, что в Kotlin можно проверить, не является ли тип, используя !is.Мне было интересно, есть ли эквивалент в Swift или обходной путь, который я мог бы использовать, если это невозможно?

Пример в Kotlin:

Предположим, что животные - это интерфейс различных животных, и есть классыкоторые реализуют его, например Cat, Dog, Horse, Spider и т. д .:

var animals = listOf<Animals>(Horse(), Cat(), Dog(), Spider())
var chosenAnimals = animals.filter { it !is Spider }

Ответы [ 5 ]

0 голосов
/ 17 февраля 2019

Или вы можете создать свою собственную функцию isNot, например:

extension Animal {
    func isNot<T: Animal>(_ type: T.Type) -> Bool {
        return !(self is T)
    }
}

print(Horse().isNot(Fish.self)) // prints true
print(Horse().isNot(Horse.self)) // prints false
0 голосов
/ 17 февраля 2019

В Swift нет эквивалента, но его аналогом является оператор is.Вам нужно только отменить результат оператора.

var animals = listOf<Animals>(Horse(), Cat(), Dog(), Spider())
var chosenAnimals = animals.filter { !($0 is Spider) }

Или, так как вы используете мутирующую коллекцию (var), вы можете использовать removeAll(where:)

var animals = listOf<Animals>(Horse(), Cat(), Dog(), Spider())
animals.removeAll(where: { $0 is Spider })
print("Animals: \(animals)") // should not contain Spider instances
0 голосов
/ 17 февраля 2019

Используя быстрый синтаксис, это один из способов сделать это

let animals: [Animals] = [Horse(), Cat(), Dog(), Spider()]
var chosenAnimals = animals.filter { type(of: $0) != Spider.self }

или

var chosenAnimals = animals.filter { !($0 is Spider) }
0 голосов
/ 17 февраля 2019

Вот рабочий пример в Swift:

protocol Animal { }

class Horse : Animal { }
class Cat : Animal { }
class Dog : Animal { }
class Spider : Animal { }

let animals:[Animal] = [Horse(), Cat(), Dog(), Spider()]
let chosen = animals.filter { !($0 is Spider) }

Заполните ваши протоколы / классы так, как вам нравится:)

0 голосов
/ 17 февраля 2019

вы можете использовать это:

var chosenAnimals = animals.filter({!($0 is Spider)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...