我有下面的类,并且使用函数数学在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'。请帮忙
我需要将数学函数声明为类,因为我需要在其类之外使用数学函数
最佳答案
这里有几个问题。
此类KeerthanaiArray
不是数组(如名称所建议)
为什么要扩展NSObject
?
类方法match
没有任何意义,它使用的2个属性(SongTitle
和ESongTitle
)在此上下文中不存在,因为它们属于该类的实例。
因此,让我们清理您的代码
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)
}
}