2016-07-30 3 views
1

У меня ниже StructСсылка массив, который был создан другой функции

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

Но я не могу сделать так, что массив не признаются за пределами своего собственного фунца ион. Как прочитать этот массив в другой функции. Пожалуйста, помогите

+0

Почему бы не использовать массив как глобальный для этого класса. – Shad

+0

Как объявить массив как глобальный. Я не смог успешно объявить. Пожалуйста, помогите – Jebus

+0

Ваш 'keerthanaiArray' не является массивом - это' KStruct'. Похоже, вы просто хотите [объявить свойство] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html) в своем классе. Btw, имена свойств и метки параметров должны быть 'lowerCamelCase', а не' UpperCamelCase'. – Hamish

ответ

0

Объявите массив глобальным. На ваш код keerthanaiArray есть объект типа KStruct, а не массив. Посмотрите на следующее:

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

Вы можете использовать выше способ иметь значение по умолчанию пустой Строка. Так что вы можете избежать проблемы fatal error: unexpectedly found nil while unwrapping an Optional value.

+0

Я пытаюсь загрузить массив в функции viewdidload. Где я объявлю класс ArrayClass? Если я объявлю вне своей функции viewdidload, то я не смогу ссылаться на переменные songTitleT !, songLyricsT! и EsongTitleT! так как эти переменные заполняются чтением базы данных в функции viewdidload – Jebus

+0

класс ArrayClass является лишь примером. Вы должны объявить свой keerthanaiArray в соответствующем классе view-controller, на котором viewdidload() вы заполняете массив. См. Отредактированный ответ. – Shad

+0

Спасибо, теперь я свободен от ошибок компиляции, теперь, когда я запускаю код, я получил ошибку «фатальная ошибка: неожиданно найденная nil при разворачивании необязательного значения» в инструкции keerthanaiArray.append :( – Jebus

Смежные вопросы