Получение предупреждения о шаблоне let не имеет никакого эффекта подшаблон не связывал никакие переменные - PullRequest
0 голосов
/ 06 ноября 2018

Я делаю следующее, но получаю следующее предупреждение:

шаблон 'let' не имеет никакого эффекта; подшаблон не связывал никакие переменные

enum Seat {
    case middle
    case window
    case aisle(Int)
}

let m : Seat = .middle
let w : Seat = .window
let a : Seat = .aisle(5)

let seats = [m,w,a]

for seat in seats {
    if case let .middle = seat {
        print("middle")
    }
    if case let .window = seat {
        print("window")
    }
    if case let Seat.aisle(row) = seat {
        print("able to let row be the associatedvalue of seat; its value is: \(value)")
    }
}

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Вы можете использовать switch

 switch seat {
    case .middle:
        print("middle")
    case .window:
        print("window")
    case let .aisle(row):
        print("able to let row be the associatedvalue of seat; its value is: \(row)")
}
0 голосов
/ 06 ноября 2018

В дополнение к двум другим правильным ответам, если вы сделаете Seat Equatable, вы можете сравнить с == для случаев, у которых нет связанного значения:

enum Seat: Equatable {
    case middle
    case window
    case aisle(Int)
}

let m : Seat = .middle
let w : Seat = .window
let a : Seat = .aisle(5)

let seats = [m,w,a]

for seat in seats {
    if seat == .middle {
        print("middle")
    }
    else if seat == .window {
        print("window")
    }
    else if case .aisle(let row) = seat {
        print("able to let row be the associatedvalue of seat; its value is: \(row)")
    }
}

Примечание: Я также переписал последний случай как if case .aisle(let row) = seat, что, по-моему, делает let привязку более ясной, когда существует только одна переменная для привязки.

0 голосов
/ 06 ноября 2018

Все просто. В трех случаях только aisle имеет ассоциированное значение типа Int. У ваших .middle & .window дел нет связанного значения для извлечения, т.е. нет связываемого значения. Достаточно просто знать, что это так. Чтобы предупреждение исчезло, измените:

if case let .middle = seat

до:

if case .middle = seat

то же самое для вашего .window чехла

...