Ответ 1
Как упоминалось в примечаниях к выпуску Xcode 6 beta 6, большое количество API-интерфейсов Foundation проверено для дополнительного соответствия.
Эти изменения заменяют T!
на T?
или T
в зависимости от того, может ли значение быть нулевым (или нет) соответственно.
notification.userInfo
теперь является необязательным словарем:
class NSNotification : NSObject, NSCopying, NSCoding {
// ...
var userInfo: [NSObject : AnyObject]? { get }
// ...
}
поэтому вам нужно развернуть его. Если вы знаете, что userInfo
не nil
, тогда
вы можете просто использовать "принудительное разворачивание":
var info = notification.userInfo!
но обратите внимание, что это приведет к сбою во время выполнения, если userInfo
- nil
.
В противном случае лучше использовать необязательное назначение:
if let info = notification.userInfo {
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
} else {
// no userInfo dictionary present
}