이는 결과 문자열로 보간 하는 것이 종종 바람직하지 않으며 암시 적으로 언 래핑 된 선택 사항이있는 경우 특히 놀랍기 때문에이 풀 요청 에서 변경된 사항 입니다. 이 변경 사항에 대한 자세한 내용은 여기 메일 링리스트 에서 볼 수 있습니다 .Optional(...)
풀 리퀘스트 토론에서 언급했듯이 (불행히도 Xcode는 아니지만)-경고를 사용하는 것보다 약간 더 좋은 방법 String(describing:)
은 보간하는 옵션 유형에 캐스트를 추가하는 것입니다. 예를 들면 다음과 같습니다.
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i as Int?)")
print("description of d: \(d as Double?)")
다음과 같이 일반화 할 수도 있습니다 as Optional
.
print("description of i: \(i as Optional)")
print("description of d: \(d as Optional)")
Swift 5에서 SE-0228에 의해 도입 된 새로운 문자열 보간 시스템과 함께 또 다른 옵션은 다음에 대한 사용자 정의 appendInterpolation
오버로드 를 추가하는 것입니다 DefaultStringInterpolation
.
extension DefaultStringInterpolation {
mutating func appendInterpolation<T>(optional: T?) {
appendInterpolation(String(describing: optional))
}
}
var i: Int? = 5
var d: Double? = nil
print("description of i: \(optional: i)")
print("description of d: \(optional: d)")
원하는 경우 인수 레이블을 제거하여 모듈 내에서 (또는으로 표시 한 경우 특정 파일 내에서) 경고를 완전히 비활성화 할 수도 있습니다 fileprivate
.
extension DefaultStringInterpolation {
mutating func appendInterpolation<T>(_ optional: T?) {
appendInterpolation(String(describing: optional))
}
}
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i)")
print("description of d: \(d)")
개인적으로는 인수 레이블을 유지하고 싶습니다.