제니스 사무소에서 Optional 출연.

4717 단어 Swift
제목과 같이 일반적인 방법이 아니기 때문에 메모로 남긴다.
네트워크를 사용하지 않으면 아래에서 역할을 올바르게 할당할 수 있습니다.
let hoge: Any? = nil
hoge as! String?  // nil
그러나 일반 함수에서 같은 동작을 수행하면 force unwrap 오류가 발생합니다.
func convert<T>(_ value: Any?) -> T {
    return value as! T
}

convert(nil) as String?  // fatal error: unexpectedly found nil while unwrapping an Optional value
이것은 또 다른 열네크스 함수를 통해 피할 수 있다.
func convert<T>(_ value: Any?) -> T {
    func cast<U, V>(_ value: U, to type: V.Type) -> V {
        return value as! V
    }
    return cast(value, to: T.self)
}

convert(nil) as String?  // nil

※ 달성하고자 하는 것은 옵티올, 비 옵티올이 모두 허용할 수 있는 캐릭터 정의입니다.
struct Hoge {
    let val1: String
    let val2: String?
}

Hoge(val1: convert(dict["val1"]),
     val2: convert(dict["val2"]))


// 逐一 `as` を書きたくない
Hoge(val1: dict["val1"] as! String,
     val2: dict["val2"] as? String)

좋은 웹페이지 즐겨찾기