Ios 为什么使用';标识符';在Swift中打印NSMutableArray的对象时显示?
我是一个发展迅速的人。我扫描可移动设备并将其添加到NSMutableArray。当我尝试打印NSMUTABLEARRY中的all对象时,它显示了“标识符”的模糊用法。 我在扫描回调时添加设备,如下代码所示:Ios 为什么使用';标识符';在Swift中打印NSMutableArray的对象时显示?,ios,swift,bluetooth-lowenergy,Ios,Swift,Bluetooth Lowenergy,我是一个发展迅速的人。我扫描可移动设备并将其添加到NSMutableArray。当我尝试打印NSMUTABLEARRY中的all对象时,它显示了“标识符”的模糊用法。 我在扫描回调时添加设备,如下代码所示: var ScanMeshList:NSMutableArray? func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertise
var ScanMeshList:NSMutableArray?
func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
print("peripheral name = \(peripheral.name)")
print("peripheral id = \(peripheral.identifier)")
print("peripheral rssi = \(RSSI)")
ScanMeshList?.addObject(peripheral)
}
并在单击按钮时打印NSMutableArray中的所有对象:
@IBAction func StopScan(sender: AnyObject) {
//for device in ScanMeshList!
for var index = 0; index < ScanMeshList!.count; index++
{
print("ScanMeshList device name = \(ScanMeshList![index].name) , id = \(ScanMeshList![index].identifier)")
}
}
@IBAction func StopScan(发送方:AnyObject){
//用于ScanMeshList中的设备!
对于var index=0;index
但它在print(“ScanMeshList设备名称=\(ScanMeshList![index.name),id=\(ScanMeshList![index.identifier])中显示了错误(使用“identifier”的含义不明确)
我错过什么了吗
提前感谢。尝试将数组元素强制转换为所需的类型
CGPeripheral
。斯威夫特不知道数组元素的类型
if let thePeripheral = ScanMeshList![index] as? CBPeripheral {
print("ScanMeshList device name = \(thePeripheral.name) , id = \(thePeripheral.identifier)")
}
或者,您可以使用键入的Swift数组
[cbperipal]
而不是NSMutableArray
尝试将数组元素强制转换为预期的类型cgperipal
。斯威夫特不知道数组元素的类型
if let thePeripheral = ScanMeshList![index] as? CBPeripheral {
print("ScanMeshList device name = \(thePeripheral.name) , id = \(thePeripheral.identifier)")
}
或者,您可以使用类型化的Swift数组
[cbperipal]
而不是NSMutableArray
使用本机数组
,NSMutableArray
是模糊的,因为它不包含类型信息
var scanMeshList = [CBPeripheral]()
并且不需要使用可选的。如果没有设备,则数组为空。使用本机
数组
,NSMutableArray
将变得模糊,因为它不包含类型信息
var scanMeshList = [CBPeripheral]()
并且不需要使用可选的。如果没有设备,则阵列为空。在此处进行耦合。问题可能是编译器不知道ScanMeshList包含什么。由于您将它放在NSMutableArray中,因此没有类型信息 如果希望在当前状态下使用它,则需要在for循环中强制转换对象。示例如下:
print("ScanMeshList device name = \((ScanMeshList![index] as! CBCBPeripheral).name) , id = \((ScanMeshList![index] as! CBCBPeripheral).identifier)")
但是,我强烈建议利用swifts泛型,将CBPeripheral对象添加到swift类型的数组中,这样编译器就知道数组中每个对象的类型,并避免任何强制转换。示例如下:
var scanMeshList:[CBPeripheral] = [CBPeripheral]()
func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
print("peripheral name = \(peripheral.name)")
print("peripheral id = \(peripheral.identifier)")
print("peripheral rssi = \(RSSI)")
scanMeshList.append(peripheral)
}
func StopScan(sender: AnyObject) {
//for device in scanMeshList!
for (scanMeshListItem) in scanMeshList {
print("ScanMeshList device name = \(scanMeshListItem.name) , id = \(scanMeshListItem.identifier)")
}
}
这里有几件事。问题可能是编译器不知道ScanMeshList包含什么。由于您将它放在NSMutableArray中,因此没有类型信息 如果希望在当前状态下使用它,则需要在for循环中强制转换对象。示例如下:
print("ScanMeshList device name = \((ScanMeshList![index] as! CBCBPeripheral).name) , id = \((ScanMeshList![index] as! CBCBPeripheral).identifier)")
但是,我强烈建议利用swifts泛型,将CBPeripheral对象添加到swift类型的数组中,这样编译器就知道数组中每个对象的类型,并避免任何强制转换。示例如下:
var scanMeshList:[CBPeripheral] = [CBPeripheral]()
func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
print("peripheral name = \(peripheral.name)")
print("peripheral id = \(peripheral.identifier)")
print("peripheral rssi = \(RSSI)")
scanMeshList.append(peripheral)
}
func StopScan(sender: AnyObject) {
//for device in scanMeshList!
for (scanMeshListItem) in scanMeshList {
print("ScanMeshList device name = \(scanMeshListItem.name) , id = \(scanMeshListItem.identifier)")
}
}