2017-10-05 92 views
0

我想聲明一個帶有NSMutableArray<Client>值的字典。 但事情是我得到一個錯誤,這指出我刪除<Client>部分。Swift 3 - 如何聲明一個類型化的NSMutableArray

​​

如何被用於申報的正確方法類型化的NSMutableArray

+7

你爲什麼要保留基金會(NSStuff一樣的NSMutableArray)的斯威夫特3,而不是使用SWIFT陣列,比如'VAR mydict任何特別的原因:字符串:[客戶]'? – Larme

+0

@ricardo:如果所有你想要實現的是通過引用傳遞,而不是通過使用NSMutableArray傳值,那麼考慮將客戶端轉換爲類而不是結構,並使用Swift數組即可通過引用不傳遞值 –

+0

@Ricardo :在swift中的數組是以Struct的形式實現的。因此,當你創建一個類對象的數組時,它本身就像傳遞值那樣傳遞,這意味着像數組一樣對數組進行任何操作,比如移除對象/插入對象不會被反射回傳遞的數組,而是通過引用傳遞數組中的類對象,數組中任何對象的屬性都將保持並反映在傳遞的數組對象中。 –

回答

0
var myDict = [String : [Client]]() 
+0

這不是一個NSMutableArray,結構通過複製傳遞。 – Ricardo

1

NSMutableArray是一個異構容器

+1

我認爲在obj-c有一種方法來指向這種容器的類型,如NSMutableArray Ricardo

0

你也可以這樣寫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) 
     } 
    } 
+0

不,[客戶端]是一個結構!不是一個物體! – Ricardo

+0

你錯了。閱讀這個https://stackoverflow.com/a/24251066/2139691 – Ricardo

1

維沙爾帕特爾的回答快速擴張:

如果粘貼成故事板這一點,將失敗的無客戶端類型

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] 
    } 
} 
0

你不應該使用NSMutableArray更多,但是你不能達到由參通與NSMutableArray無論是Client如果是結構

請使用如下

var myDict = [String : [Client]]() 

如果要通過裁判通過,則Client應該是一個類在您的實現不結構

如果你想要去struct只有那麼你需要手動重新分配更新Client`到字典背

(更好的選擇)

(myDict["key1"] as! [Client]).firstName = "Jon" 

的情況下結構的情況下,

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 

注:例如我hav Ë加入第一和0指數靜態

希望這是你清楚

相關問題