我有下面的类,并且使用函数数学在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个属性(SongTitleESongTitle)在此上下文中不存在,因为它们属于该类的实例。


因此,让我们清理您的代码

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

07-24 20:36