【问题标题】:Fixed size array in swift快速固定大小的数组
【发布时间】:2015-07-24 15:50:04
【问题描述】:

我有一个固定大小的数组

var fieldNameArray = [String?](count: 4, repeatedValue: nil)

我这样做是为了搜索数组中是否有元素

  if let temp = find(fieldNameArray,"profile_picture"){//i get a compile error here
            //remove the data
           ....




        }else{

            println(" //append the value")
           .....

        }

但是我得到一个编译时错误

不能使用类型为 '([(String?)] 的参数列表调用 'find', 字符串)'

我想我应该打开它吗?我该怎么做呢

更新

 SRWebClient.POST(registerURl)

            .data(registerImagesArray, fieldName: fieldNameArray, data: parametersToPost)

            .send({(response:AnyObject!, status:Int) -> Void in//here compile time error


                println("response object: \(response)")

在我将数组更改为固定大小的数组后再次出现此错误

不能使用类型为 '((AnyObject!, Int) 的参数列表调用 'send' -> 无效,失败:(NSError!)-> 无效)

【问题讨论】:

    标签: ios arrays swift


    【解决方案1】:

    为了提高效率,你不应该按照 Manav Gabhawala 的建议去做,而是自己编写一个 find 函数:

    func myFind(array: [String?], value: String) -> Int? {
        for (i, av) in enumerate(array) {
            if av != nil && av! == value {
                return i
            }
        }
        return nil;
    }
    

    当 Swift 编译为机器码时,您将获得与标准库的 find 几乎相同的性能。

    【讨论】:

    • 是的,我在想……在运行时解析编译器需要很长时间?
    • @copeME 好吧,实际的问题是运行时。 Manav Gabhawala 的解决方案分配了两个额外的数组来最终迭代其中一个。当您的列表中有许多可能导致性能问题的对象时。
    • @copeME 不,编译器不分配对象。编译器只是将 Swift 代码翻译成机器码。处理器可以理解的那种代码。 (它可能会优化你的一些代码。)
    • 所以这就是谢谢...我现在有另一个问题在我将数组更改为固定大小之前正在工作...请查看更新的问题..我不想发布另一个问题一个简单的问题,所以
    • @copeME 这是一个完全不同的问题。请换一个新的。
    【解决方案2】:

    尝试改用这个(Swift 2.0):

    if let index = fieldNameArray.indexOf("profile_picture") {
            //remove the data using the index
           ....
    
    } else {
           print("// append the value")
           .....
    }
    

    在 swift 1.2 中(效率有点低,但可以):

    if let temp = find(fieldNameArray.filter { $0 != nil}.map { $0! },"profile_picture") { 
        // Then same code as question... 
    

    【讨论】:

    • 没问题。尽管请注意 temp 不会是您期望的索引,因为我们正在过滤原始数组,因此如果您正在使用它,请注意。如果您需要索引,我建议您使用 [Int: String?] 类型的字典,这样您就可以得到类似符号的数组,但使用字典代替。如果您想这样实现它,请告诉我,我会更新答案。
    • 非常感谢...在我将数组更改为固定大小之前,我现在遇到了另一个问题...请查看更新后的问题
    猜你喜欢
    • 2012-03-17
    • 2016-06-03
    • 2010-09-29
    • 1970-01-01
    • 2014-11-28
    • 2013-11-09
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多