实例成员不能用于类型Array

时间:2016-07-27 18:30:26

标签: arrays swift function class search

我有以下类,我使用函数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函数

1 个答案:

答案 0 :(得分:0)

这里有几个问题。

  1. 此类KeerthanaiArray不是数组(而是由名称建议)
  2. 你为什么要延长NSObject
  3. 类方法match毫无意义,它使用的2个属性(SongTitleESongTitle)在此上下文中不存在,因为它们属于实例< / strong>该课程。
  4. 因此,让我们清理你的代码

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