Comment puis-je passer un dictionnaire comme paramètre d'une fonction?

Je suis en train de passer d'un dictionnaire comme un paramètre de la fonction. J'ai la fonction suivante

func makeAndAddVisitorRecord2(visitorDict: Dictionary) -> ABRecordRef <AnyObject, AnyObject> {
    let visitorRecord: ABRecordRef = ABPersonCreate().takeRetainedValue()
    ABRecordSetValue(visitorRecord, kABPersonFirstNameProperty, visitorDict[1], nil)
    ABRecordSetValue(visitorRecord, kABPersonLastNameProperty, visitorDict[2], nil)
    //ABRecordSetValue(visitorRecord, kABPersonEmailProperty, visitorDict[5], nil)

    let phoneNumbers: ABMutableMultiValue =
    ABMultiValueCreateMutable(ABPropertyType(kABMultiStringPropertyType)).takeRetainedValue()
    ABMultiValueAddValueAndLabel(phoneNumbers, visitorDict["visitorPhone"], kABPersonPhoneMainLabel, nil)
    ABRecordSetValue(visitorRecord, kABPersonPhoneProperty, phoneNumbers, nil)

    ABAddressBookAddRecord(addressBookRef, visitorRecord, nil)
    saveAddressBookChanges()

    return visitorRecord
}

Laquelle je tiens à déclencher par

func addVisitorToContacts(sender: AnyObject) {
    //let visitor = ListVisitors[visitorButton.tag]
    var visitorDict:[Int:String] = [1:"\(visitorName)", 2:"\(visitorCompany)", 3:"\(visitorCity)",
        4:"\(visitorPhone)", 5:"\(visitorEmail)"]

    let visitorRecord: ABRecordRef = makeAndAddVisitorRecord2(visitorDict)
    let contactAddedAlert = UIAlertController(title: "\(visitorName) was successfully added.",
        message: nil, preferredStyle: .Alert)
    contactAddedAlert.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil))
    presentViewController(contactAddedAlert, animated: true, completion: nil)
}

Mais makeAndAddVisitorRecord2 compile une erreur

 Cannot specialize non-generic type 'ABRecordRef' (aka 'AnyObject')

[EDIT 1] solution viable mais pas optimale car je ne suis pas à l'aide de mon Visiteur struct

func makeAndAddVisitorRecord2(visitorDict: Dictionary <Int, String>) -> ABRecordRef  {

[EDIT 2] @rsmoz remarquer que je devrais utiliser mon Visiteur struct

class Visitor {

var visitorName : String
var visitorCompany : String
var visitorPlace : String
var visitorPhone : String
var visitorEmail : String

init(visitorName: String, visitorCompany: String, visitorPlace: String, visitorPhone: String, visitorEmail: String) {
    self.visitorName = visitorName
    self.visitorCompany = visitorCompany
    self.visitorPlace = visitorPlace
    self.visitorPhone = visitorPhone
    self.visitorEmail = visitorEmail
}

}

J'ai donc un ListVisitors classe qui génère quelques Visiteurs et ressemble

class ListVisitors{
    static var sharedInstance = [Visitor]()

static func load()
    {
        //@todo: stored and loaded data
        var visitor = Visitor(visitorName: "From Class Matt", visitorCompany: "Google", visitorPlace: "San Diego", visitorPhone: "94888484", visitorEmail: "[email protected]")
        sharedInstance = [visitor]

        visitor = Visitor(visitorName: "From Class John", visitorCompany: "nike", visitorPlace: "New York", visitorPhone: "94888484", visitorEmail: "[email protected]")
        //       ListVisitors.sharedInstance += [visitor]
        sharedInstance += [visitor]
...
}
}

Et dans mon contrôleur principal, j'ai une vue de la table et d'une ligne sélectionnée envoie le visiteur détails à detailcontroller (COMMENT puis-je avoir sélectionné visiteur struct en vue de détail de contrôleur?? Dois-je laisser passer selectedVisitor à la vue de détail de contrôleur?)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if (segue.identifier == "visitorDetails") {

            if let indexPath = tableView.indexPathForCell(sender as! UITableViewCell) {

                let selectedVisitor = lVisitors[indexPath.row] as Visitor

                let detailVC = segue.destinationViewController as! DetailViewController

                detailVC.visitorName = selectedVisitor.visitorName
                detailVC.visitorCompany = selectedVisitor.visitorCompany
                detailVC.visitorPlace = selectedVisitor.visitorPlace
                detailVC.visitorPhone = selectedVisitor.visitorPhone
                detailVC.visitorEmail = selectedVisitor.visitorEmail

            } //.end accessory select

        } // .end segue
Double Possible de Comment passer du dictionnaire en tant que paramètre dans le methind dans Swift?
Pourquoi avez-vous besoin Int:String dictionnaire? Suffit d'utiliser un tableau.
hmm, j'ai essayé let visitorArr: Array = [String]() and visitorArr["visitorName"] = visitorName et a essayé de passer le tableau en paramètre. Pourriez-vous fournir un exemple de code simple??? Pourquoi serait à l'aide d'un tableau > dictionnaire??

OriginalL'auteur alex | 2016-01-03