类型'[Businessdata]'的值没有成员'objectAtIndex'
我尝试将搜索栏实现到我的表格视图。但我在一个函数中得到这个错误。不知道如何解决?类型'[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如何解决我的问题 帮我出去!
数组中没有objectAtIndex
。你需要做这样的事情:
arrDict[i]
而不是
arrDict.objectAtIndex(i)
编辑
正如我们在评论中讨论,这是你所需要的
if((arrDict[i].name.lowercaseString?.containsString(text.lowercaseString)) == true)
现在我收到另一个错误''Value of type'Businessdata'has no member'objectForKey'' .. – user5513630
in this line if((arrDict [i] .objectForKey(“name”)?. lowercaseString?.containsString( text.lowercaseString))== true)1 – user5513630
是BuisnessData是一个自定义类 – penatheboss
尝试这一个:
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.lowercaseString)) == true)
{
arrSearch.addObject(arrDict[i]);// or arrSearch.append(arrDict[i])
}
}
TableViewList.reloadData();
}
同样的错误''String'类型的值没有成员'lower caseString' – user5513630
objectAtIndex:
属于NSArray
和objectForKey:
属于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
})
请遵守命名约定并始终使用以小写字母开头的变量名称。
为什么要求使用小写字母的var名称?命名传统 - 这取决于任何人,不是吗?在某些情况下,我认为这是正确的,但是在开发应用程序时,swift提供了许多方法来满足您的需求 – pedrouan
你想使用Swift对象,就好像它们是'NS'对象一样。这会导致很多错误。我建议编写实际的Swift代码。 –
您至少在Swift 2中不推荐使用迭代。最好在0 ..
Akaino
你刚刚使用一些工具将Obj-C转换为Swift吗? – Sulthan