【问题标题】:Reference an array which was created by another function引用由另一个函数创建的数组
【发布时间】:2016-07-30 17:41:16
【问题描述】:

我有以下结构

struct KStruct {
let SongTitle: String
let SongLyrics: String
let ESongTitle: String

 init(SongTitle: String, SongLyrics:String, ESongTitle: String) {
    self.SongTitle =  SongTitle
    self.SongLyrics = SongLyrics
    self.ESongTitle = ESongTitle
}
func match(string:String) -> Bool {
    let lowerCaseKeyword = string.lowercaseString
    return SongTitle.lowercaseString.containsString(lowerCaseKeyword) || ESongTitle.containsString(lowerCaseKeyword)

    }
}

我将其转换为一个数组,并在 viewDidload 函数中的循环中填充该数组

let keerthanaiArray = KStruct(SongTitle : songTitleT!, SongLyrics : songLyricsT!,
                                    ESongTitle : EsongTitleT!)

现在我试图在另一个函数 filterContentForSearchText 中引用这个数组

但我无法这样做,因为数组在其自身功能之外无法识别。如何在另一个函数中读取此数组。请帮忙

【问题讨论】:

  • 为什么不将该数组用作该类的全局。
  • 如何将数组声明为全局。我无法成功申报。请帮忙
  • 您的keerthanaiArray 不是一个数组——它是一个KStruct。听起来您只想在课堂上declare a property。顺便说一句,属性名称和参数标签应该是lowerCamelCase,而不是UpperCamelCase
  • 我正在尝试使用 KStruct 声明创建一个数组。我正在读取一个包含标题、歌词、etitle 的数据库文件,并尝试在循环中填充此数组。我做的不对吗?

标签: ios arrays swift function reference


【解决方案1】:

将数组声明为全局。在您的代码中,keerthanaiArrayKStruct 类型的对象,而不是数组。请看以下内容:

var keerthanaiArray:[KStruct]!

override func viewDidLoad() {
    super.viewDidLoad()
    if KeerthanaigalDB.open()
    {
        var i = 0
        let querySQL = "SELECT * FROM KEERTHANAIGAL ORDER BY ROWID DESC"
        let results:FMResultSet? = KeerthanaigalDB.executeQuery(querySQL, withArgumentsInArray: nil)
        if (results != nil)
        {
            while results!.next()
            {
                let songTitleT = results?.stringForColumn("SONGNAME")  as? String ?? ""
                arrayData1.append(songTitleT!)
                let songLyricsT = results?.stringForColumn("SONGLYRICS")  as? String ?? ""
                arrayData2.append(songLyricsT!)
                let EsongTitleT = results?.stringForColumn("ESONGNAME")  as? String ?? ""


                keerthanaiArray.append(KStruct(SongTitle : songTitleT, SongLyrics : songLyricsT,
                    ESongTitle : EsongTitleT))
            }
        }
    }
}

您可以使用上面的方式来获得一个空的默认值String。这样您就可以避免fatal error: unexpectedly found nil while unwrapping an Optional value 问题。

【讨论】:

  • 我正在尝试在 viewdidload 函数中加载数组。我将在哪里声明类 ArrayClass?如果我在 viewdidload 函数之外声明,那么我将无法引用变量 songTitleT!、songLyricsT!和 EsongTitleT!因为这些变量是通过在 viewdidload 函数中读取数据库来填充的
  • class ArrayClass 只是一个例子。您应该在要填充数组的 viewdidload() 的相应视图控制器类中声明您的 keerthanaiArray。请查看编辑后的答案。
  • 谢谢,现在我没有编译错误了,现在当我运行代码时,在 keerthanaiArray.append 语句中出现错误“致命错误:在展开可选值时意外发现 nil”:(
  • songTitleT、songLyricsT 和 EsongTitleT 与“!”一起使用,因为它们中的任何一个都可以有 nil。这就是您收到错误的原因。
  • 如果我删除 !然后我得到错误“可选字符串'String'的值?'没有打开;你的意思是用“!”或者 '?' "
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
相关资源
最近更新 更多