Tag: interop

NativeScript:从interop.reference获取string

开始,这里是我的代码: var buffer = malloc(interop.sizeof(interop.types.UTF8CString)); var fillBuffer = mac.getBytes(buffer); var bytes = new interop.Reference(interop.types.UTF8CString, buffer); var hexMac = bytes[0]; variables“Mac”是从CoreBluetooth检索到的NSData对象。 这是来自BLE设备的扫描响应,其中包含外设的MAC地址(00:0b:57:a2:fb:a0)。 这个问题与我之前发布的这个问题有关。 提供的解决scheme是伟大的; 不过,我似乎无法在nativescript中实现这一点: (instancetype)stringWithFormat:(NSString *)格式,…; 智能感知告诉我方法不存在typesNSString。 由于这个问题,我决定去另一条路线(如你所知)。 我用MAC地址的字节填充缓冲区。 在上面的代码中,bytes [0]等于0xb57a2fba0。 我现在试图将(这是一个interop.Reference)转换成一个string,我可以存储在后端(最好是在xx:xx:xx:xx:xx格式)。 我整个周末都在这里,似乎无法find解决办法。 我甚至打破了objc!foundation.d.ts来判断stringWithFormat是否被支持,无济于事。 当地社区的松懈也无法提供解决scheme。 如果可以的话请帮忙!

didBeginContact传递了PKPhyicsObject

我有一个扩展SKPhysicsContact的帮手方法 extension SKPhysicsContact { /// – returns: `[SKPhysicsBody]` containing all the bodies that match `mask` func bodiesMatchingCategory(mask: UInt32) -> [SKPhysicsBody] { let bodies = [bodyA, bodyB] return bodies.filter { ($0.categoryBitMask & mask) != 0 } } } 在didBeginContact()我在传入的contact调用此方法。 func didBeginContact(contact: SKPhysicsContact) { let ballMask: UInt32 = 0x1 << 2 let ball = contact.bodiesMatchingCategory(ballMask) … 我有时会得到这个错误消息(比如5中的1)会导致应用程序崩溃: […]

为什么Objective-C API返回隐含的解包选项?

我对此感到困惑。 如果我们以UITableView的方法cellForRowAtIndexPath:为例,它的方法签名是: func cellForRowAtIndexPath(_ indexPath: NSIndexPath!) -> UITableViewCell! 其回报值是: 表示单元格的对象,或者如果单元格不可见或indexPath超出范围,则为nil。 这听起来像是使用标准可选的完美理由。 实际上,由于Objective-C中所有基于指针的types都可以是零,所以所有的Objective-C指针types都应该作为标准选项来导入。 我从WWDC的谈话中知道,他们认为,对于隐含的解包选项: 可以明确地testing为零 可以直接访问底层值的属性/方法 可以隐式转换为其基础值 从Apple的Cocoa和Objective-C中使用Swift, 当您访问这种types的可选types的值时,如果不安全地解包它,隐式解包的可选操作将检查值是否丢失。 如果缺less该值,则会发生运行时错误。 所以,他们决定把它作为一个声明,说它永远不应该是零,但可能是一个可选项,而不是将一个可能的零值导入到Swift中。 这听起来像是他们完全否定了Swift中Objective-C API的可选types的安全性。 我似乎错过了什么? 他们没有给出编译时间错误或警告,而是认为运行时错误更好? 这很混乱。 考虑到似乎没有任何东西可以回答我所看到的这个问题……我认为这是其他人显而易见的,我只是没有看到,而是……为什么这样呢? 是否真的只是为了避免人们在Swift中使用Objective-C API时使用或不使用链接,或者更多?