스위프트 3에서 String
을 만들려면 다음 변환을 StaticString
에서 수행 하시겠습니까?런타임시 StaticString을 String으로 변환하는 방법은 무엇입니까?
let fileName : StaticString = #file
let currentFile : String = file.description
스위프트 3에서 String
을 만들려면 다음 변환을 StaticString
에서 수행 하시겠습니까?런타임시 StaticString을 String으로 변환하는 방법은 무엇입니까?
let fileName : StaticString = #file
let currentFile : String = file.description
는 아니, 엄격하게에게 String
에 StaticString
를 변환하는 올바른 방법이 아니다; description
에 의해 리턴 된 값은 구현 세부 사항입니다.
String
을 얻는 가장 간단한 방법은 fileName
에 명시 적 유형 주석을 추가하지 않는 것입니다. 그것은 String
되는 기본값 것 같이, 그러나
let fileName = #file
print(type(of: fileName)) // String
를이 실제 사용 사례에서 수 없습니다 가정, 또 다른 옵션은 순서의 init(decoding:as:)
initialiser 'withUTF8Buffer(_:)
방법 String
과 함께의'StaticString
을 사용하는 것입니다 물론, 당신은이에 대한 자신의 편의 initialiser를 만들 수,
let fileName: StaticString = #file
let currentFile = fileName.withUTF8Buffer {
String(decoding: $0, as: UTF8.self)
}
print(currentFile)
: 그리고 정적 문자열의 UTF-8 코드 단위를 디코딩 할 수
extension String {
init(_ staticString: StaticString) {
self = staticString.withUTF8Buffer {
String(decoding: $0, as: UTF8.self)
}
}
}
let fileName: StaticString = #file
let currentFile = String(fileName)
print(currentFile)
하지만이 전환이 너무 자주 일어나서는 안됩니다.