Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 3-如何声明类型化NSMutableArray_Ios_Arrays_Swift - Fatal编程技术网

Ios Swift 3-如何声明类型化NSMutableArray

Ios Swift 3-如何声明类型化NSMutableArray,ios,arrays,swift,Ios,Arrays,Swift,我想声明一个具有NSMutableArray值的字典。 但问题是我得到了一个错误,它指向我删除部分 var mydict: [String:NSMutableArray<Client>] = [:] var mydict:[字符串:NSMutableArray]=[:] 声明类型化NSMutableArray的正确方法是什么?NSMutableArray是异构容器吗?NSMutableArray是异构容器吗 var myDict = [String : [Client]]()

我想声明一个具有
NSMutableArray
值的字典。 但问题是我得到了一个错误,它指向我删除
部分

var mydict: [String:NSMutableArray<Client>] = [:]
var mydict:[字符串:NSMutableArray]=[:]

声明类型化NSMutableArray的正确方法是什么?NSMutableArray是异构容器吗?NSMutableArray是异构容器吗

var myDict = [String : [Client]]()
你可以这样做

import UIKit
import PlaygroundSupport

    struct Client
    {

    }
    class MyViewController : UIViewController {

        var mydict: [String:[Client]] = [:]

        override func loadView() {
            let client = Client()
            mydict["xyz"] = [client]
            print(mydict)
        }
    }

您也可以这样编写
var mydict:[String:[Client]]=[:]

你可以这样做

import UIKit
import PlaygroundSupport

    struct Client
    {

    }
    class MyViewController : UIViewController {

        var mydict: [String:[Client]] = [:]

        override func loadView() {
            let client = Client()
            mydict["xyz"] = [client]
            print(mydict)
        }
    }

快速扩展Vishal Patel的回答:

如果将其粘贴到情节提要中,则在无客户端类型上将失败

import UIKit
import PlaygroundSupport

struct Client
{

}

struct NoneClient
{

}

class MyViewController : UIViewController {

    var mydict: [String:[Client]] = [:]

    override func loadView() {
        let client = Client()
        mydict["xyz"] = [client]

        let noneClient = NoneClient()

        mydict["abc"] = [NoneClient]
    }
}

快速扩展Vishal Patel的回答:

如果将其粘贴到情节提要中,则在无客户端类型上将失败

import UIKit
import PlaygroundSupport

struct Client
{

}

struct NoneClient
{

}

class MyViewController : UIViewController {

    var mydict: [String:[Client]] = [:]

    override func loadView() {
        let client = Client()
        mydict["xyz"] = [client]

        let noneClient = NoneClient()

        mydict["abc"] = [NoneClient]
    }
}

您不应该再使用
NSMutableArray
,但是如果
NSMutableArray
struct

请像下面这样使用

 var myDict = [String : [Client]]()
如果希望通过ref传递,那么
客户机
应该是实现中的,而不是结构

如果只想使用
struct
,则需要手动将更新后的客户端`重新分配给字典

如果是(更好的选项)

如果是结构

    var clientObjArray =  (myDict["key1"] as! [Client])
    var clientObjArrayFirstObj =  clientObjArray.first
    clientObjArrayFirstObj?.name =  "Jon"
    clientObjArray.remove(at: 0)
    clientObjArray.insert(clientObjArrayFirstObj!, at: 0)
    myDict["key1"] = clientObjArray
注意:例如,我添加了first和0索引static


希望您清楚

您不应该再使用
NSMutableArray
,但是如果
NSMutableArray
struct

请像下面这样使用

 var myDict = [String : [Client]]()
如果希望通过ref传递,那么
客户机
应该是实现中的,而不是结构

如果只想使用
struct
,则需要手动将更新后的客户端`重新分配给字典

如果是(更好的选项)

如果是结构

    var clientObjArray =  (myDict["key1"] as! [Client])
    var clientObjArrayFirstObj =  clientObjArray.first
    clientObjArrayFirstObj?.name =  "Jon"
    clientObjArray.remove(at: 0)
    clientObjArray.insert(clientObjArrayFirstObj!, at: 0)
    myDict["key1"] = clientObjArray
注意:例如,我添加了first和0索引static


希望你能清楚地知道为什么你想在SWIFT 3中保持基金会(NStres,像NSMutableArray),而不使用SWIFT数组,比如<代码> var MyDAT: [String:[Client ] ]李嘉图:如果您所要达到的所有目标是通过引用而不是通过使用NSMutabRealEx传递值,那么考虑将客户机转换为类而不是结构,使用SWIFT数组THATS将是通过引用而不是通过。value@Ricardo:swift中的数组实现为Struct。因此,当您创建类对象数组时,数组本身将作为传递值传递,这意味着数组上的任何操作(如删除对象/插入对象)都不会反射回传递的数组,但数组中的类对象是通过引用传递的,因此数组中任何对象的修改属性都将保持不变并反映在传递的数组中李嘉图:最后,如果你想将SWIFT数组本身作为引用传递(浅拷贝),那么考虑将它作为“在PARAM中传递”:“希望它有助于在SWIFT 3中保持基础(NStases,如NSMutableArray)的特定原因,而不使用SWIFT数组,如<代码> var MyDITE:[String:[Client ] ]。李嘉图:如果您所要达到的所有目标是通过引用而不是通过使用NSMutabRealEx传递值,那么考虑将客户机转换为类而不是结构,使用SWIFT数组THATS将是通过引用而不是通过。value@Ricardo:swift中的数组实现为Struct。因此,当您创建类对象数组时,数组本身将作为传递值传递,这意味着数组上的任何操作(如删除对象/插入对象)都不会反射回传递的数组,但数组中的类对象是通过引用传递的,因此数组中任何对象的修改属性都将保持不变并反映在传递的数组中数组对象也是如此。@李嘉图:最后,如果您想将SWIFT数组本身作为传递引用(浅拷贝),那么考虑将其传递为Out-PARAM,而是:希望它帮助这不是NSMutabRead射线,结构是通过复制传递的。这不是NSMutabReLay.结构是通过副本传递的。我认为在obj-c中有一种方法可以指向像NSMUTABLEARRAY这样的容器类型我认为在obj-c中有一种方法可以指向像NSMutableArrayNo这样的容器类型,[客户端]是一个结构!!不是目标!不,[客户端]是一个结构!!不是目标!