2016-05-06 16 views
0

Ich versuche, Suchleiste zu meiner Tabellenansicht zu implementieren. Aber ich bekomme diesen Fehler in einer Funktion. Weiß nicht, wie man löst ??Wert des Typs '[BusinessData]' hat kein Mitglied 'objectAtIndex'

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

Mein Code

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(); 

    } 

Editiert:

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 
     } 
    } 

} 

Hier habe ich die Bussinessdata Klasse code.Now geschrieben wie für mein Problem Helfen Sie mir zu lösen !!

+1

Sie versuchen Swift-Objekte zu verwenden, als wären sie 'NS'-Objekte. Das wird zu vielen Fehlern führen. Ich schlage vor, den tatsächlichen Swift-Code zu schreiben. –

+0

Ihre Verwendung der Iteration ist in mindestens Swift 2 veraltet. Besser gehen für 'für i in 0 .. Akaino

+0

Haben Sie gerade Obj-C zu Swift mit einem Werkzeug? – Sulthan

Antwort

1

In einem Array ist kein objectAtIndex enthalten. Sie brauchen so etwas wie dies zu tun:

arrDict[i] 

Statt

arrDict.objectAtIndex(i) 

bearbeiten

Wie wir in den Kommentaren diskutiert das ist, was Sie

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

jetzt bekomme ich einen weiteren Fehler '' Wert des Typs 'Businessdata' hat kein Mitglied 'objectForKey'' .. – user5513630

+0

in dieser Zeile 'if ((arrDict [i] .objectForKey (" name ")?. LowcaseString? .containsString (text.lowercaseString)) == true) 1 – user5513630

+0

Ist BuisnessData eine benutzerdefinierte Klasse – penatheboss

1

Try brauchen dieses:

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

selbe Fehler 'Wert des Typs 'String' hat kein Mitglied 'KleinbuchstabenString' – user5513630

1

objectAtIndex: gehört zu NSArray und objectForKey: gehört NSDictionary zu.
Beide sind nicht für die nativen Swift-Typen verfügbar.

Aber es gibt zwei fatale Probleme:

Businessdata ist eine benutzerdefinierte Klasse, die auf objectForKey: nicht reagiert überhaupt, und es gibt keine Eigenschaft name in der Klasse.

Sie Angenommen, sprechen über die Eigenschaft BusinessName und die Logik soll alle Businessdata Instanzen filtern, deren Klein Kette von BusinessName enthält die Suchzeichenfolge

arrSearch = [Businessdata]() 

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

oder swifiter schreiben könnte

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

Und bitte beachten Sie die Namenskonvention und verwenden Sie immer Variablennamen, die mit einem Kleinbuchstaben beginnen.

+0

Warum fragen Sie nach Var-Namen mit Kleinbuchstaben? Namenskonvention - es liegt an jedem, oder? Ich halte dies in bestimmten Fällen für richtig, aber bei der Entwicklung Ihrer App bietet swift viele Möglichkeiten, um Ihren Code so komfortabel wie nötig zu gestalten – pedrouan

Verwandte Themen