2016-11-02 5 views
3

SQLite 액세스를 위해 SwiftData를 사용하고 있습니다. SwiftData (SQLite wrapper)가 Swift 3.0으로 깨졌습니다.

https://github.com/mozilla-mobile/firefox-ios/blob/master/Storage/ThirdParty/SwiftData.swift

SwiftData

스위프트 부호화 SQLite는 래퍼이다. Swift 3.0과 XCode 8 이후에 다음 줄이 깨졌습니다.

let text = UnsafePointer<Int8>(sqlite3_column_text(statement, index)) 

결과에 : 나는 그래서 깨진 무엇 해결에 도움 부탁드립니다 스위프트와 noobie의 일종이야 " 'init을하는 것은'를 사용할 수 없습니다 : 사용 'withMemoryRebound (로 : 용량 : _)'에 일시적으로 메모리를 또 다른 레이아웃 호환 유형으로 간주하십시오. " 에

return Data(bytes: UnsafePointer<UInt8>(blob), count: Int(size)) 

결과가 "형의 인수 목록 유형 'UnsafePointer'에 대한 초기화를 호출 할 수 없습니다 '(UnsafeRawPointer?)'"에

return sqlite3_column_int(statement, index) != 0 

결과 : '! =' " 'BOOL은 생산 '이 아닌 예상 상황에 맞는 결과 유형'AnyObject ' "

let text = UnsafePointer<Int8>(sqlite3_column_text(statement, index)) 

에 결과 :' '? 초기화하기'는 사용할 수 없습니다 : 사용 '(: 용량 :에 _가) withMemoryRebound'임시로 다른 레이아웃 호환되는 메모리를 볼 수 있습니다 유형." 에

for i: Int32 in 0 ..< columnCount += 1 { 

결과 : "연산자를 돌연변이의 왼쪽 측면 변경할 수없는 '.. <'불변의 값을 반환합니다"

모든 도움말 높이 평가! 그가 (옵션) AnyObject이 예상되는 경우 반환 값으로 이해되지 않는다, 그래서

+1

는'sqlite3_column_text' 문제 http://stackoverflow.com/a/25169265/1187415를 참조하십시오. –

+1

마지막 문제는 http://stackoverflow.com/questions/39940937/error-in-for-loop-cgfloat의 중복입니다 (루프에 '+ = 1'이있는 이유는 무엇입니까?) –

+0

* " '!= ''예상되는 문맥 결과 유형이 아닌 'Bool'을 생성합니다 "AnyObject?"* 더 많은 컨텍스트를 알아야하는 문제 : 함수가 반환하는 것 –

답변

1

sqlite3_column_int(statement, index)Int32

sqlite3_column_int(statement, index) != 0 

는 부울 값입니다 반환합니다. 대신 NSNumber에 정수를 포장 할 수 있습니다 스위프트 3, 아무것도AnyObject로 변환 할 수 있습니다

func getColumnValue(_ statement: OpaquePointer, index: Int32, type: String) -> AnyObject? { 
    return sqlite3_column_int(statement, index) as AnyObject 
} 

때문에

func getColumnValue(_ statement: OpaquePointer, index: Int32, type: String) -> AnyObject? { 
    let val = sqlite3_column_int(statement, index) 
    return NSNumber(value: val) 
} 

또 다른 옵션이 될 것입니다. 두 번째 해결 방법의 차이점은 개체가 이 원래 숫자 형식 Int32으로 다시 변환 될 수 있지만 Int 또는 다른 정수 형식으로 변환되지 않습니다.

다른 문제를 들어,

관련 문제