2014-12-11 9 views
1

Я хотел бы назвать метод, который имеет параметр inout. И в этом методе есть замыкание. Вот что я сделал:Inout параметр в замыкании (Swift)

var groups : [Group] 
func setup() { 
    ... // add some element to the array... 

    self.setupUser(user, group: &groups!) 
    ... 
} 

func setupUser(user: User, inout group: [Group]) { 
    user.getGroup(callBack: ({(aGroup:Group) in 
     group[0] = aGroup 
    })) 
} 

Но после того, как я назвал метод setupUser, первый элемент массива [0] не изменилось. Я думаю, проблема в том, что я использую inout-параметр в закрытии, но как решить эту проблему в Swift?

ответ

0

Пробег: group.append(aGroup). Это сработало для меня.

площадка:

import Cocoa 
struct Group { 
    var name:String 
} 
class User { 
    var name:String 
    init() { 
    name = "" 
    } 

    func setupUser(user:User, group:[Group]) { 

    } 

    func getGroup (callBack: (Group) ->()) { 
    println("call") 
    callBack(Group(name: "Test")) 
    println("back") 
    } 
} 
var groups = [Group]() 
var user = User() 
func setup() { 

    setupUser(user, &groups) 
} 

func setupUser(user: User, inout group: [Group]) { 
    println("hi") 
    user.getGroup(({(aGroup:Group) in 
    println(group) 
    println(aGroup) 
    group.append(aGroup) 
    })) 
} 

setup() 
groups 
0

INOUT переменный должен быть назначаемым в замыкании:

struct Group { 
    let value: Int 
} 

struct User { 
    func getGroup(callback: Group->()) { 
     callback(Group(value: 2)) 
    } 
} 

var groups: [Group] = [Group(value: 1)] 
func setup() { 
    setupUser(User(), &groups) 
} 

func setupUser(user: User, inout group: [Group]) { 
    user.getGroup { aGroup in 
     // assigns to the inout variable 
     group[0] = aGroup 
    } 
} 

groups[0] // a Group with value = 1 
setup() 
groups[0] // now a Group with value = 2 

Я думаю, что фактическая проблема может лежать в части коды вы не включить в своем потому что то, что вы разместили, не будет работать как есть (например, в вашем фактическом коде groups действительно просто массив? Или он необязательный, содержащий массив, поскольку в противном случае ему не понадобилось бы! ...)

Смежные вопросы