我正在尝试像这样观察collectionView.contentSize:
func startObserveCollectionView() { collectionView.addObserver(self,forKeyPath: "contentSize",options: NSKeyValueObservingOptions.Old.union(NSKeyValueObservingOptions.New),context: &SearchDasboardLabelContext) } override func observeValueForKeyPath(keyPath: String?,ofObject object: AnyObject?,change: [String : AnyObject]?,context: UnsafeMutablePointer<Void>) { if context == &SearchDasboardLabelContext { if object === collectionView && keyPath! == "contentSize" { print(change) } } }
在xcode终端我得到了一个NSSize而不是像这样的CGSize:
Optional(["old": NSSize: {320,0},"new": NSSize: {375,39.5},"kind": 1])
在objective-c中,我使用了方法CGSizeValue
CGSize newContentSize = [[change objectForKey:NSKeyValueChangeNewKey] CGSizeValue];
在swift中有没有像CGSizeValue这样的方法
我试过swift var newContentSize = change [NSKeyValueChangeNewKey]?.CGSizeValue()但是得到了错误
could not find member ‘CGSizeValue’
需要帮助吗?谢谢
解决方法
你在iOS上吗?因为我,我做了同样的事情,并得出了同样的问题;为何选择NSSize?也许这就是xcode终端对我们起作用的伎俩.
无论如何,您可以将其强制转换为NSValue,然后您就可以使用CGSizeValue了:
if let zeChange = change as? [NSString: NSValue] { let oldSize = zeChange[NSKeyValueChangeOldKey]?.CGSizeValue() let newSize = zeChange[NSKeyValueChangeNewKey]?.CGSizeValue() }