Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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
Ios 为什么使用';标识符';在Swift中打印NSMutableArray的对象时显示?_Ios_Swift_Bluetooth Lowenergy - Fatal编程技术网

Ios 为什么使用';标识符';在Swift中打印NSMutableArray的对象时显示?

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

我是一个发展迅速的人。我扫描可移动设备并将其添加到NSMutableArray。当我尝试打印NSMUTABLEARRY中的all对象时,它显示了“标识符”的模糊用法。

我在扫描回调时添加设备,如下代码所示:

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)")
    }
}