gpt4 book ai didi

objective-c - 使用可选返回值访问 UIDynamicItemBehavior 中的项目

转载 作者:行者123 更新时间:2023-11-30 10:23:10 26 4
gpt4 key购买 nike

我想用 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
}

我发现两个问题:

  1. dynamicItemBehavior.items.firstObject 不是 Array,因此没有 firstObject 方法

  2. 我无法返回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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com