es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambios no documentados en la API de CoreBluetooth.

En Xcode 12.3, CoreBluetooth.CBService.peripheral se define en objective-c como:

objc
@property(assign, readonly, nonatomic) CBPeripheral *peripheral;

Actualización: Aquí está la traducción a Swift de lo anterior en Xcode 12.3:

unowned(unsafe) open var peripheral: CBPeripheral { get }

En Xcode 13.0, CBService.peripheral se define en Swift como:

swift
weak var peripheral: CBPeripheral? { get }

La documentación de Apple indica que esta API ha existido desde iOS5 y no ha habido cambios. Sin embargo, en Xcode 13, la variable claramente es opcional. (Y no es opcional en Xcode 12.3 ya que le falta el atributo nullable.)

La solución es relativamente fácil (por ejemplo, service.peripheral -> service?.peripheral), pero hace imposible utilizar el mismo código para Xcode 12.3 y 13.0. Me pregunto si hay algún matiz aquí que me esté perdiendo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En Xcode 12.3, CoreBluetooth.CBService.peripheral está definido como una propiedad sin dueño y no segura en Swift y como una propiedad assign, readonly y nonatomic en Objective-C. Sin embargo, en Xcode 13.0, la misma propiedad está definida como una variable weak opcional en Swift, lo que hace que sea incompatible con la versión anterior. La documentación de Apple afirma que no ha habido cambios desde iOS5, pero esta inconsistencia genera preguntas sobre la compatibilidad. Aunque la corrección es sencilla, hace imposible utilizar el mismo código tanto para Xcode 12.3 como para 13.0. Por lo tanto, puede haber algunos matices que deben considerarse al utilizar esta API en diferentes versiones de Xcode.

Comments are closed.