Быстрая проверка, если класс соответствует протоколу всегда true - PullRequest
0 голосов
/ 04 апреля 2019
protocol Device {
}
protocol ActiveDevice: Device {
}
protocol NoActive: Device {
}

ViewController:

class ViewController : UIViewController {
  let device: Device
}

Настройка устройства для ViewController.currentDevice - это объект, который соответствует протоколу Device

vc.device = currentDevice as! ActiveDevice

Проверка, соответствует ли он протоколу:

    if let currentDevice = device as? NoActive  {
        print("Its not active device")
    }else if let currentDevice = device as? ActiveDevice {
        print("Its active device")
    }else {
        print("Its just a device")
    }

Он всегда печатает Its not active device того, что я ожидал бы в этом случае, что оннапечатал бы Its active device

1 Ответ

0 голосов
/ 04 апреля 2019

Пожалуйста, проверьте следующий код и дайте мне знать, если это поможет.

protocol Device {
}
protocol ActiveDevice: Device {
}
protocol NoActive: Device {
}

// class TestDevice: Device {
// class TestDevice: ActiveDevice {
class TestDevice: NoActive {

}

let currentDevice = TestDevice()

// let device: Device = currentDevice as! ActiveDevice
(It threw error as "Could not cast value of type '__lldb_expr_9.TestDevice' (0x11a2f9090) to '__lldb_expr_9.ActiveDevice' (0x11a6d0628)."). We cannot do this.

let device: Device = currentDevice


if device is NoActive  {
    print("Its not active device")
}else if device is ActiveDevice {
    print("Its active device")
}else {
    print("Its just a device")
}

Теперь вывод «Это не активное устройство».И после изменения TestDevice на «ActiveDevice» он напечатал «Его активное устройство» и т. Д.

...