我有以下类,我使用函数math来搜索SongTitle和ESongTitle中的字符串。
class KeerthanaiArray: NSObject {
var SongTitle: String = String()
var SongLyrics: String = String()
var ESongTitle: String = String()
init(SongTitle: String, SongLyrics:String, ESongTitle: String) {
self.SongTitle = SongTitle
self.SongLyrics = SongLyrics
self.ESongTitle = ESongTitle
}
class func match(string:String) -> Bool {
return SongTitle.containsString(string) || ESongTitle.containsString(string)
}
}
我收到错误消息'实例成员SongTitle不能用于类型'Keerthanaiarray'。请帮忙
我需要将math func声明为class,因为我需要在类之外使用math函数
答案 0 :(得分:0)
这里有几个问题。
KeerthanaiArray
不是数组(而是由名称建议)NSObject
?match
毫无意义,它使用的2个属性(SongTitle
和ESongTitle
)在此上下文中不存在,因为它们属于实例< / strong>该课程。因此,让我们清理你的代码
struct Song {
let title: String
let lyrics: String
let eTitle: String
func match(keyword: String) -> Bool {
return title.containsString(keyword) || eTitle.containsString(keyword)
}
}
我让你成为一个结构,因为它更有意义。你可以自由地回到课堂上。如果你留在结构上,请记住它们是价值类型。
现在给出Song(s)
let songs: [Song] = ...
和关键字
let keyword = "The Great Gig In the Sky"
这是我们搜索数组的方式
let results = songs.filter { $0.match(keyword) }
struct Song {
let title: String
let lyrics: String
let eTitle: String
func match(keyword: String) -> Bool {
let lowerCaseKeyword = keyword.lowercaseString
return title.lowercaseString.containsString(lowerCaseKeyword) || eTitle.lowercaseString.containsString(lowerCaseKeyword)
}
}