2015-04-07 2 views
1

У меня есть следующий общий класс, где я хочу, чтобы управлять струнный хэш:Невозможно присвоить результат этого выражения с дженериков

class NamedProfile<T> { 
    private var set = [String:T]() 
    private var profiles = [String]() 
    private let userDefaults = NSUserDefaults.standardUserDefaults() 
    private let profileName:String 
    var currentSet = "" 
    init(name:String, set:[String:T]) { 
    profileName = name 
    self.set = set 
    if let existingProfiles = userDefaults.objectForKey(name) as? [String] { 
     profiles = existingProfiles 
    } 
    for key in profiles { 
     if let existingProfile = userDefaults.objectForKey(profileNamed(name)) as? T { 
     set[key] = existingProfile // <-- error 
     } 
    } 
    } 
    private func profileNamed(name:String) -> String { return "\(profileName) \(name)" } 
} 

Почему компилятор хрип в приведенном выше задания?

ответ

1

В

init(name:String, set:[String:T]) { 
    // ... 
    set[key] = existingProfile // <-- error 
    // ... 
} 

set относится к (неизменному) параметру метода. Используйте self.set вместо этого, чтобы обратиться к собственности.

+0

Ах! Конечно. Одна из ловушек :-) Спасибо! –

+1

Одна из причин, по которой я привык всегда использовать 'self.' – nhgrif

+0

Я подумаю об этом. До сих пор было всего лишь несколько случаев, когда я попал в эту ловушку. –

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