나는 다음과 같은 코드는 컴파일 발견하고 작동합니다문자열 값은
이func foo(p:UnsafePointer<UInt8>) {
var p = p
for p; p.memory != 0; p++ {
print(String(format:"%2X", p.memory))
}
}
let str:String = "今日"
foo(str)
이 E4BB8AE697A5
인쇄하고는 지금까지 내가이 알고있는 今日
의 유효한 UTF8 표현입니다 문서화되지 않은 행동입니다. , 널 포인터
- 무기 호 : 함수가 UnsafePointer 인수를 고려로 선언 the document:
에서, 다음 중 하나를 받아 들일 수 또는 AutoreleasingUnsafeMutablePointer 값 (필요한 경우 UnsafePointer로 변환 됨)
- 피연산자가 유형 값의 lvalue이고 lvalue의 주소로 전달되는 in-out 표현식 상기 어레이의 시작에 대한 포인터 등의 전달 63,210
- A [형태] 값
str
그들의 비이며,이 경우에는 통화
기간 동안 수명 - 연장.
나는 뭔가를 놓친가요?
ADDED :
그리고 내부 String
표현은 UTF16
let str = "今日"
var p = UnsafePointer<UInt16>(str._core._baseAddress)
for p; p.memory != 0; p++ {
print(String(format:"%4X", p.memory)) // prints 4ECA65E5 which is UTF16 今日
}
마지막 하나 인 것 같습니다. – Mundi
나는 생각한다.'String'은'Array' –
rintaro
이 아니며 두 번째부터 말하려고합니다. 이것은 in-out 변수와 같습니다. 어쩌면 ** "통과 한"** 표현이 명확하지 않을 수도 있습니다. 이것은 "이 함수가이 인수를 해석하는 방법"("나는 생각한다") 또는 "이것은 당신이 전달해야하는 것"을 의미 할 수 있습니다. – Mundi