5
쿼리가 선택적 값을 반환하고 오류를 throw 할 수있는 SQLite 라이브러리를 사용하고 있습니다. 조건부로 값의 랩을 풀고 싶으면 오류를 반환하면 nil을받습니다. 이 기 해제를 강제하는 것을 방지하기 위해 방법이 있나요함수는 throw하고 선택 사항을 반환합니다. 한 줄에서 조건 적으로 unwrap을 할 수 있습니까?
func getSomething() throws -> Value? {
//example function from library, returns optional or throws errors
}
func myFunctionToGetSpecificDate() -> Date? {
if let specificValue = db!.getSomething() {
let returnedValue = specificValue!
// it says I need to force unwrap specificValue,
// shouldn't it be unwrapped already?
let specificDate = Date.init(timeIntervalSinceReferenceDate: TimeInterval(returnedValue))
return time
} else {
return nil
}
}
:이는 모습입니다,이,이 코드가 설명하는 방법으로 단어를 완전히 확실하지 않다? Swift3으로 업데이트하기 전에는 강제로 강제로 unwrap하지 않았습니다.
다음은 실제 코드입니다. 그냥 모든 항목에서 최신 타임 스탬프를 얻으려고 노력 :
func getLastDateWithData() -> Date? {
if let max = try? db!.scalar(eventTable.select(timestamp.max)){
let time = Date.init(timeIntervalSinceReferenceDate: TimeInterval(max!))
// will max ever be nil here? I don't want to force unwrap!
return time
} else {
return nil
}
}
정확히 내가 무엇을 찾고 있었습니까. 나는 전에 보지 못한 것을 보지 못했다. 나는 그것에 대해 읽어야 할 것이다. 또한 .some (.some (val))은 무엇을 의미합니까? –
@twiz_ : 선택 사항은'.none'과'.some (wrapped) '가있는 열거 형입니다. '.some (.some (val))'은 중첩 된 선택적 값으로 nil이 아니며 unwrapped 값도 nil이 아닙니다. 다음은 중첩 된 선택 사항을 사용하는 또 다른 예입니다. http://stackoverflow.com/questions/27225232/two-or-more-optionsals-in-swift. –
까다로운 까닭은, 호출의 성공에만 관심이 있고 반환 된 데이터가 아닌 경우, 호출이 실패를 나타내는 nil을 반환하면 쉽게 혼동 될 수 있기 때문입니다. –