相关疑难解决方法(0)

创建一个扩展来从Swift中的Array过滤nils

我正在尝试编写一个Array的扩展,它允许将一个可选的T数组转换成一个非可选的T数组.

例如,这可以写成这样的自由函数:

func removeAllNils(array: [T?]) -> [T] {
    return array
        .filter({ $0 != nil })   // remove nils, still a [T?]
        .map({ $0! })            // convert each element from a T? to a T
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法将其作为扩展工作.我试图告诉编译器扩展只适用于可选值的数组.这是我到目前为止:

extension Array {
    func filterNils<U, T: Optional<U>>() -> [U] {
        return filter({ $0 != nil }).map({ $0! })
    }
}
Run Code Online (Sandbox Code Playgroud)

(它不编译!)

arrays generics swift swift-extensions

46
推荐指数
6
解决办法
2万
查看次数

Swift:快捷方式展开选项数组

假设我们定义了一组选项:

var arrayOfOptionals: [String?] = ["Seems", "like", "an", nil, "of", "optionals"]
Run Code Online (Sandbox Code Playgroud)

我可以用一小段时间强行打开它: var arrayForCrash = arrayOfOptionals.map { $0! }

但这会让应用程序崩溃,还有其他任何简短的方法(没有明确展开)我如何解开一个可选数组?

swift

36
推荐指数
2
解决办法
2万
查看次数

UITableView一次只能选中一行

你认为这很容易.使用此代码,我可以检查表中的多行,但我想要的是一次只检查一行.如果用户选择不同的行,那么我希望旧行只是自动取消选中.不知道该怎么做.这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[tableView deselectRowAtIndexPath:indexPath animated:YES];


UITableViewCell *theCell = [tableView cellForRowAtIndexPath:indexPath];

if (theCell.accessoryType == UITableViewCellAccessoryNone) {
    theCell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

    else if (theCell.accessoryType == UITableViewCellAccessoryCheckmark) {
    theCell.accessoryType = UITableViewCellAccessoryNone;
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢您提供的任何帮助!

xcode ios4 ios xcode4 ios5

18
推荐指数
6
解决办法
5万
查看次数

更简单的方法来过滤Swift数组中的nil

假设我有一个名为的Swift对象Animal。我有一系列Animal对象,其中一些可能是nil

目前,我正在这样做:

arrayOfAnimal.filter({$0 != nil}) as! [Animal]

由于力量解开,这感觉很hacky。想知道是否有更好的方法可以滤除nil。

ios swift

6
推荐指数
2
解决办法
2698
查看次数

标签 统计

swift ×3

ios ×2

arrays ×1

generics ×1

ios4 ×1

ios5 ×1

swift-extensions ×1

xcode ×1

xcode4 ×1