作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 Swift 重写这个 Objective-C 方法。我正在努力寻找最好的方法来做到这一点。
- (UIDynamicItemBehavior*) itemBehaviourForView:(UIView*)view
{
for (UIDynamicItemBehavior* behaviour in _animator.behaviors)
{
if (behaviour.class == [UIDynamicItemBehavior class] && [behaviour.items firstObject] == view)
{
return behaviour;
}
}
return nil;
}
我写了类似的东西:
func itemBehaviorForView(view :UIView)->UIDynamicItemBehavior
{
for dynamicItemBehavior in animator.behaviors
{
if dynamicItemBehavior is UIDynamicItemBehavior && dynamicItemBehavior.items.firstObject == view
{
return dynamicItemBehavior as UIDynamicItemBehavior
}
}
return nil
}
我发现两个问题:
dynamicItemBehavior.items.firstObject
不是 Array
,因此没有 firstObject
方法
我无法返回nil
对于这些我该怎么办?
最佳答案
如果该函数有可能返回 nil
那么函数的返回类型必须是可选的。在您的情况下,将函数声明为:
func itemBehaviorForView (view:UIView) -> UIDynamicItemBehavior?
UIDynamicItemBehavior
的文档声明items
作为数组:
var items: [AnyObject]! { get }
因此,您将使用数组下标表示法引用第一个对象:
dynamicItemBehavior.items[0]
当然,items
可能是空的。要在惯用的 Swift 中处理这个问题,请使用:
if dynamicItemBehavior is UIDynamicItemBehavior {
if let firstView = dynamicItemBehavior.items?[0] {
if firstView == view {
return dynamicItemBehavior as UIDynamicItemBehavior
}
}
}
哪里使用if let <var>
将绑定(bind)<var>
当且仅当 ...items?
的结果不是nil
.
关于objective-c - 使用可选返回值访问 UIDynamicItemBehavior 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826996/
我想用 Swift 重写这个 Objective-C 方法。我正在努力寻找最好的方法来做到这一点。 - (UIDynamicItemBehavior*) itemBehaviourForView:(U
我正在使用 UIPanGestureRecognizer 和 UIAttachmentBehavior 在屏幕上移动 UIView。当用户结束手势时,我使用 UIDynamicItemBehavior
我是一名优秀的程序员,十分优秀!