Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中使用obj-C运行时方法设置类的属性_Swift_Core Bluetooth - Fatal编程技术网

在Swift中使用obj-C运行时方法设置类的属性

在Swift中使用obj-C运行时方法设置类的属性,swift,core-bluetooth,Swift,Core Bluetooth,我有一个类,我想在运行时设置它的属性值,尽管没有签名来设置它 例如: 我希望能够随意更改此类的状态,因为我正在为单元测试创建存根 存根: 在这里,我希望使用obj-C运行时方法, setValue:forKey来完成此操作,但我得到了错误: 错误:“&”与类型为“UnsafePointer”的非inout参数一起使用 (又名“未安全指针”) 是否有任何方法可以在运行时设置该类的值以操作该类进行测试?您不能更改CBCentralManager的状态,因为它是只读属性。如果您想执行这样的测试,您需要

我有一个类,我想在运行时设置它的属性值,尽管没有签名来设置它

例如:

我希望能够随意更改此类的状态,因为我正在为单元测试创建存根

存根:

在这里,我希望使用obj-C运行时方法,
setValue:forKey
来完成此操作,但我得到了错误:

错误:“&”与类型为“UnsafePointer”的非inout参数一起使用 (又名“未安全指针”)


是否有任何方法可以在运行时设置该类的值以操作该类进行测试?

您不能更改
CBCentralManager
状态,因为它是只读属性。如果您想执行这样的测试,您需要模拟CBCentralManager类,您可以使用更改ivar的值,但是您的案例更复杂,因为属性是只读的。该属性可以是一个计算属性,可能涉及超过1个ivarThank,请大家提出建议-我能够覆盖存根中的状态变量并获得所需的内容。
public class CBCentralManager : NSObject {
   public var state: CBCentralManagerState { get }
 ...
}
class CBCentralManagerStub: CBCentralManager {
   func changeState(newState: CBCentralManagerState) {
      let val: NSValue = NSValue(&newState, withObjCType: &(CBCentralManagerState.rawValue))
      self.setValue(val, forKey:"state")
   }
}