Swift에서 Optional에 기본값을 제공 하시겠습니까?
Swift에서 옵션을 처리하는 관용구가 너무 장황한 것처럼 보입니다. 원하는 것이 기본값이 아닌 경우 기본값을 제공하는 것입니다.
if let value = optionalValue {
// do something with 'value'
} else {
// do the same thing with your default value
}
불필요하게 코드를 복제하거나
var unwrappedValue
if let value = optionalValue {
unwrappedValue = value
} else {
unwrappedValue = defaultValue
}
unwrappedValue
상수 가 필요 하지 않습니다.
스칼라의 옵션 모나드 (Swift의 옵션과 기본적으로 같은 아이디어)에는 다음과 같은 방법 getOrElse
이 있습니다.
val myValue = optionalValue.getOrElse(defaultValue)
뭔가 빠졌습니까? 스위프트는 이미 그렇게하는 간단한 방법을 가지고 있습니까? 아니면, getOrElse
선택에 대한 확장 으로 정의 할 수 있습니까?
최신 정보
Apple은 이제 통합 연산자를 추가했습니다.
var unwrappedValue = optionalValue ?? defaultValue
이 경우 삼항 연산자는 당신의 친구입니다
var unwrappedValue = optionalValue ? optionalValue! : defaultValue
Optional 열거 형에 대한 고유 한 확장을 제공 할 수도 있습니다.
extension Optional {
func or(defaultValue: T) -> T {
switch(self) {
case .None:
return defaultValue
case .Some(let value):
return value
}
}
}
그럼 당신은 할 수 있습니다 :
optionalValue.or(defaultValue)
그러나 다른 개발자가 or
방법 을 조사하지 않고도 훨씬 빨리 이해할 수 있으므로 삼항 연산자를 고수하는 것이 좋습니다.
참고 : 나는 시작 모듈 과 같은 일반적인 도우미를 추가 할 or
에 Optional
신속로합니다.
2014 년 8 월 Swift는이를 수행 할 수있는 통합 연산자 (??)를 보유하고 있습니다. 예를 들어 선택적 문자열 myOptional의 경우 다음과 같이 작성할 수 있습니다.
result = myOptional ?? "n/a"
당신이 쓴 경우 :
let result = optionalValue ?? 50
그리고 optionalValue != nil
다음 result
될 것입니다 optional
너무 당신은 미래에 랩을 해제해야합니다
그러나 당신은 연산자를 쓸 수 있습니다
infix operator ??? { associativity left precedence 140 }
func ???<T>(optLeft:T?, right:T!) -> T!
{
if let left = optLeft
{
return left
}
else { return right}
}
이제 다음을 수행 할 수 있습니다.
let result = optionalValue ??? 50
그리고 때 optionalValue != nil
다음이 result
될 것입니다unwraped
다음은 작동하는 것 같습니다
extension Optional {
func getOrElse<T>(defaultValue: T) -> T {
if let value = self? {
return value as T
} else {
return defaultValue
}
}
}
however the need to cast value as T
is an ugly hack. Ideally, there should be a way to assert that T
is the same as the type contained in the Optional. As it stands, type inferencing sets T
based on the parameter given to getOrElse, and then fails at runtime if this does not match the Optional and the Optional is non-nil:
let x: Int?
let y = x.getOrElse(1.414) // y inferred as Double, assigned 1.414
let a: Int? = 5
let b: Double = a.getOrElse(3.14) // Runtime failure casting 5 to Double
참고URL : https://stackoverflow.com/questions/24099985/providing-a-default-value-for-an-optional-in-swift
'development' 카테고리의 다른 글
Xcode 9 GM-이전 버전에서 WKWebView NSCoding 지원이 중단되었습니다. (0) | 2020.07.01 |
---|---|
jekyll markdown 내부 링크 (0) | 2020.07.01 |
사용자가 HTTP 대신 HTTPS를 통해 내 페이지에 액세스하도록하려면 어떻게해야합니까? (0) | 2020.07.01 |
Python의 Hello World (0) | 2020.07.01 |
목록에서 문자열 값 찾기 및 바꾸기 (0) | 2020.07.01 |