Из-за NSNotificationCenter.defaultCenter(). PostNotificationName userinfo принимает только словари с данными, соответствующими протоколу AnyObject, есть ли у кого-нибудь какие-либо предложения о том, как публиковать структуры как часть NSNotification?NSNotificationCenter передает структуры как часть UserInfo
Вначале я подумал, что это нужно, чтобы обернуть структуру в классе, но тогда в чем смысл использования структуры в первую очередь.
Я что-то упустил или это просто результат объединения Swift с API, созданным для Objective C?
Вот демонстрация того, что я описываю: -
class wrapper: NSObject {
var aStructToWrap: aStruct
init(theStruct: aStruct) {
aStructToWrap = theStruct
super.init()
}
}
struct aStruct {
var aValue: String
}
let aRealStruct = aStruct(aValue: "egg")
NSNotificationCenter.defaultCenter().postNotificationName("aKey", object: nil, userInfo: ["anotherKey": aRealStruct]) // ERR: Extra argument 'userinfo' in call
let wrappedStruct = wrapper(theStruct: aRealStruct)
NSNotificationCenter.defaultCenter().postNotificationName("aKey", object: nil, userInfo: ["anotherKey": wrappedStruct]) // no error
Я никогда не использовал дженерики, поэтому мне потребовалось некоторое время, пытаясь определить, как вернуть мою структуру. Я использовал объект уведомления, но концепция такая же, если пусть wrapperItem = notification.object как? Wrapper { let foo = wrapperItem.wrappedValue } –
DogCoffee
Как я могу получить значение, когда я нахожусь в словаре userinfo на AddObserver? – eddwinpaz
let editStruct = payload.userInfo? ["Утверждение"] как? Wrapper и увидеть значение print ((editStruct? .wrappedValue.aValue)! As String) @DogCoffee –
eddwinpaz