Sobes.tech
Back to questions
Junior — Middle
70

Чем отличаются операторы some и any в условиях проверки условий или множества?

Companies where asked
Яндекс БраузерЯндекс Браузер

Answer from AI

sobes.tech AI

В Swift операторы some и any используются для работы с протоколами, но имеют разные значения:

  • some — это ключевое слово для обозначения opaque return types (скрытых типов). Оно говорит, что функция возвращает конкретный, но скрытый тип, соответствующий протоколу. Тип фиксирован, но не раскрывается.

  • any — это ключевое слово для создания existential types (экзистенциальных типов), то есть переменных или параметров, которые могут содержать любой тип, соответствующий протоколу.

Пример:

protocol Shape {
    func area() -> Double
}

struct Circle: Shape {
    var radius: Double
    func area() -> Double { return .pi * radius * radius }
}

// some Shape — возвращает конкретный, но скрытый тип
func makeCircle() -> some Shape {
    return Circle(radius: 5)
}

// any Shape — может содержать любой тип, соответствующий Shape
func printArea(of shape: any Shape) {
    print(shape.area())
}

Таким образом, some фиксирует конкретный тип, а any допускает разные типы, соответствующие протоколу.