Swift检查类是否符合协议始终为true

问题描述 投票:0回答:1
protocol Device {
}
protocol ActiveDevice: Device {
}
protocol NoActive: Device {
}

视图控制器:

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

ios swift swift-protocols
1个回答
0
投票

请检查以下代码,如果有帮助请告诉我。

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”后,它会打印“其活动设备”等等。

© www.soinside.com 2019 - 2024. All rights reserved.