2016-07-30 3 views
1

I는이 I 배열로이를 변환하고 있는데이있는 viewDidLoad 함수 아래와 같이 루프에서이 배열 채우기하고 참조 다른 기능에 의해 생성 된 배열

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) 

    } 
} 

구조체

아래

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

지금 나는 다른 함수에 filterContentForSearchText

을이 배열을 참조하려고하지만 배열 자체 (SECURITY) 기능을 비활성화 밖에 인식되지 않기 때문에 나는 그렇게 할 수없는입니다 이온. 이 배열을 다른 함수에서 어떻게 읽습니까? 제발 도와주세요

+0

해당 클래스에 대해 배열을 전역으로 사용하지 않는 이유는 무엇입니까? – Shad

+0

배열을 전역으로 선언하는 방법. 나는 성공적으로 선언 할 수 없었다. 제발 도와주세요 – Jebus

+0

'keerthanaiArray'는 배열이 아닙니다 - 그것은'KStruct'입니다. 클래스에 [속성 선언] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html)을 원한다고 들립니다. Btw, 속성 이름 및 매개 변수 레이블은'UpperCamelCase'가 아닌'lowerCamelCase'이어야합니다. – 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를 참조 할 수 없게됩니다! 그리고 에셜 틴트! 이러한 변수는 viewdidload 함수 – Jebus

+0

ArrayClass 클래스 내의 데이터베이스를 읽음으로써 채워지므로 여기에는 그 예가 있습니다. 배열을 채우려는 viewdidload()에 해당하는 view-controller 클래스에 keerthanaiArray를 선언해야합니다. 수정 된 답변을 참조하십시오. – Shad

+0

감사합니다. 이제 컴파일 오류가 없어졌습니다. 코드를 실행할 때 keerthanaiArray.append 문에서 "치명적인 오류 : 예기치 않게 nil이 선택 값을 래핑하는 동안 오류가 발생했습니다."( – Jebus

관련 문제