develop

where Keyword (for의 where, switch 의 where, extension의 where, func의 where) 본문

iOS

where Keyword (for의 where, switch 의 where, extension의 where, func의 where)

pikachu987 2021. 1. 13. 12:29
반응형

코드를 만들다 보면 많은 곳 에서 where을 사용하고 있다.

where를 사용하는 곳을 정리해보자

 

for

let array: [Int] = [1, 2, 3, 5, 7, 12, 24, 130]

for element in array where element%2 == 0 {
    print(element)
}
2
12
24
130

for문에 where을 추가해서 원하는 값만 동작하게 할수 있다.

 

switch case

enum NetworkType {
    case success
    case suspend
    case error(code: Int)

    var result: Bool {
        switch self {
        case .success:
            return true
        case .suspend:
            return false
        case .error(let statusCode) where 200 < statusCode && statusCode < 300:
            return true
        default:
            return false
        }
    }
}

case에 where를 넣어서 해당하는 것만 빼낼수 있다.

 

extension

extension Array where Element == Int {
    func sum() -> Int {
        return self.reduce(0, +)
    }
}

[1, 3, 5, 6].sum()
extension Dictionary where Key == String, Value == Int {
    func sum() -> Int {
        self.keys.compactMap({ self[$0] }).reduce(0, +)
    }
}

["A": 1, "B": 3, "C": 5, "D": 6].sum()

extension에 원하는 타입만 받을수 있다.

 

func

func printValue<T>(_ value: Optional<T>) where T: Equatable {
    print(value)
}

self.printValue(50)
self.printValue("pikachu987")

class People: Equatable {
    let name: String
    let age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    static func == (lhs: People, rhs: People) -> Bool {
        return lhs.name == rhs.name && lhs.age == rhs.age
    }
}

self.printValue(People(name: "pikachu987", age: 50))

func에 원하는 타입만 받을수 있다.

반응형

'iOS' 카테고리의 다른 글

OptionSet  (0) 2021.01.15
AccessControl 접근 한정자  (0) 2021.01.14
Higher Order Functions 고차함수  (0) 2021.01.12
AutoLayout  (0) 2021.01.11
Blocking, Non-blocking  (0) 2021.01.10
Comments