2016-05-06 87 views
0

我尝试将搜索栏实现到我的表格视图。但我在一个函数中得到这个错误。不知道如何解决?类型'[Businessdata]'的值没有成员'objectAtIndex'

Value of type '[Businessdata]' has no member 'objectAtIndex' 

我的代码

var arrDict = [Businessdata]() 

    func searchMethod(notification:NSNotification) 
    { 

     isSearching = true; 

     let text:String = notification.userInfo!["text"] as! String; 

     arrSearch = []; 

     for(var i=0;i<arrDict.count;i++) 
     { 
      if((arrDict.objectAtIndex(i).objectForKey("name")?.lowercaseString?.containsString(text.lowercaseString)) == true) 
      { 
       arrSearch.addObject(arrDict.objectAtIndex(i)); 
      } 
     } 

     TableViewList.reloadData(); 

    } 

编辑:

import UIKit 

class Businessdata: NSObject { 

    var BusinessName: String? 
    var BusinessEmail: String? 
    var BusinessLatLng: NSArray? 
    var Address: String? 
    var ContactNumber: String? 
    var WebsiteUrl: String? 
    var Specialities:Array<String>? 
    var StoreImages: NSArray? 
    var Languages:Array<String>? 
    var PaymentMethod:Array<String>? 
    var OpenHours: [NSDictionary]? 
    var Rating: Float? 
    var Updated_date: String? 
    var FeaturedBusiness: NSDictionary? 

    init(json: NSDictionary) 
    { 
     self.BusinessName = json["business_name"] as? String 
     self.BusinessEmail = json["business_email"] as? String 
     self.BusinessLatLng = json["latlng"] as? NSArray 
     self.Address = json["location"] as? String 
     self.ContactNumber = json["phone_no"] as? String 
     self.WebsiteUrl = json["website_url"] as? String 
     self.Specialities = json["specialities"] as? Array<String> 
     self.StoreImages = json["images"] as? NSArray 
     self.Languages = json["languages"] as? Array<String> 
     self.PaymentMethod = json["method_payment"] as? Array<String> 
     self.OpenHours = json["opening_hours"] as? [NSDictionary] 
     self.Rating = json["__v"] as? Float 
     self.Updated_date = json["updated_at"] as? String 

     if((json["featured_business"]) != nil) 
     { 
      self.FeaturedBusiness = json["featured_business"] as? NSDictionary 
     } 
    } 

} 

在这里,我已经发布了Bussinessdata类code.Now如何解决我的问题 帮我出去!

+1

你想使用Swift对象,就好像它们是'NS'对象一样。这会导致很多错误。我建议编写实际的Swift代码。 –

+0

您至少在Swift 2中不推荐使用迭代。最好在0 .. Akaino

+0

你刚刚使用一些工具将Obj-C转换为Swift吗? – Sulthan

回答

1

数组中没有objectAtIndex。你需要做这样的事情:

arrDict[i] 

而不是

arrDict.objectAtIndex(i) 

编辑

正如我们在评论中讨论,这是你所需要的

if((arrDict[i].name.lowercaseString?.containsString(text.lower‌​caseString)) == true) 
+0

现在我收到另一个错误''Value of type'Businessdata'has no member'objectForKey'' .. – user5513630

+0

in this line if((arrDict [i] .objectForKey(“name”)?. lowercaseString?.containsString( text.lowercaseString))== true)1 – user5513630

+0

是BuisnessData是一个自定义类 – penatheboss

1

尝试这一个:

func searchMethod(notification:NSNotification) 
    { 

    isSearching = true; 

    let text:String = notification.userInfo!["text"] as! String; 

    arrSearch = []; 

    for(var i=0;i<arrDict.count;i++) 
    { 
     if((arrDict[i].BusinessName.lowercaseString?.containsString(text.lower‌​caseString)) == true) 
     { 
      arrSearch.addObject(arrDict[i]);// or arrSearch.append(arrDict[i]) 
     } 
    } 

    TableViewList.reloadData(); 

} 
+0

同样的错误''String'类型的值没有成员'lower caseString' – user5513630

1

objectAtIndex:属于NSArrayobjectForKey:属于NSDictionary
这两个都不适用于Swift本机类型。

但有两个致命的问题:

Businessdata是不以objectForKey:任何响应的自定义类,并且在类没有财产name

假设你正在谈论的财产BusinessName和逻辑应该过滤所有Businessdata情况下,其小写的BusinessName字符串包含搜索字符串,你可以写

arrSearch = [Businessdata]() 

for item in arrDict { 
    if let businessName = item.BusinessName as? String where businessName.lowercaseString.containsString(text.lowercaseString) { 
    arrSearch.append(item) 
    } 
} 

swifiter

arrSearch = arrDict.filter({ (item) -> Bool in 
    if let businessName = item.BusinessName as? String { 
    return businessName.lowercaseString.containsString(text.lowercaseString) 
    } 
    return false 
}) 

请遵守命名约定并始终使用以小写字母开头的变量名称。

+0

为什么要求使用小写字母的var名称?命名传统 - 这取决于任何人,不是吗?在某些情况下,我认为这是正确的,但是在开发应用程序时,swift提供了许多方法来满足您的需求 – pedrouan

相关问题