머리말
텍스트 문자열에 기능이나 구문 설탕을 추가하는 것은 다양한 프로그래밍 언어에서 일반적입니다. 예를 들어 모든 사람이 익숙한 C 언어를 사용하십시오. C 문자열은 본질적으로 문자 배열이지만 문자열을 입력 할 때마다 [ 'h', 'e', 'l', 'l', 'o']를 입력 할 필요가 없으며 컴파일러 가이 작업을 수행하기 때문에 Hello를 누르십시오.
Swift와 같은 고급 언어는 문자열이 문자 배열뿐만 아니라 문자열을 처리하며 String은 완전한 유형이며 다양한 특성을 가지고 있습니다. 먼저 String의 특징 인 Substring을 살펴 보겠습니다.
문자열을 살펴보십시오
먼저, 문자열 구현을 대략적으로 이해해 봅시다. 다음 코드는 String.swift 표준 라이브러리에서 제공됩니다.
Public Struct String {public var _core : _stringcore}물론 다른 초기화 설정이 있지만 선언에는이 스토리지 속성 만 있습니다! 비밀은 StringCore.swift에 있어야합니다.
Public Struct _stringCore {public var _BASEADDRESS : 미지의 미지의 태도? var _countandflags : uint public var _owner : anyobject?}이 유형에는 다른 많은 것들이 있지만 저장 속성에만 중점을 둡니다.
_stringCore의 실제 상황은 여기에서 언급 한 것보다 훨씬 복잡하지만 위의 내용은 문자열에 대한 정보, 즉 내부 저장 및 문자열의 크기를 쉽게 이해할 수 있습니다.
서브 스트링
Swift에서 서브 스트링을 만드는 방법은 무엇입니까? 가장 쉬운 방법은 첨자 별 문자열에서 단락을 가져 오는 것입니다.
str = "hello swift!"let slice = str.startindex .. <str.startIndex .. <str.startIndex .. <str.startIndex ..
간단하지만 코드는 너무 우아하게 보이지 않습니다.
문자열의 인덱스는 직관적 인 정수가 아니므로 가로 채기 동안의 위치 색인은 startIndex 및 index (_ : offsetby :)를 사용하여 얻어야합니다. 문자열의 시작 위치를 가로 채면 startIndex를 생략 할 수 있습니다.
witpartialRange = str [.. <str index = ""str = ""startIndex = ""nbsp = "" "" "5 =" "" "" "hello =" "> </str>하자
또는이 방법을 수집에서 사용하십시오.
slice = str.prefix (5) // 여전히 "Hello"
문자열도 컬렉션이므로 Prefix (), Diffix (), Dropfirst () 등과 같은 컬렉션에서 메소드를 사용할 수 있습니다.
서브 스트링의 내부 원리
마법의 장소를 기판하는 것은 그들이 부모 문자열의 기억을 재사용한다는 것입니다. 부모 문자열의 단락 중 하나로 서브 스트링을 이해할 수 있습니다.
예를 들어, 8000 문자열에서 100자를 자르면 100 문자 메모리 공간을 다시 구입할 필요가 없습니다.
이것은 또한 실수로 상위 문자열의 수명주기를 연장 할 수 있음을 의미합니다. 큰 문자열이있는 경우 가로 채기 된 작은 세그먼트 문자열이 해제되지 않는 한 작은 세그먼트를 가로 채면 큰 세그먼트 문자열이 해제되지 않습니다.
기판은 어떻게 이루어 집니까?
Public Struct Substring {내부 var _slice : rangereplaceblebidipectionalslice <string> </string>내부 _slice 속성은 부모 문자열에 대한 모든 정보를 보유합니다.
// 여전히 내부 내부 내부 내부 var _wholestring : string {return _slice._base} public var startIndex : index {return _slice.startIndex} public var endindex : index {return _slice.endex}속성 _Wholestring (전체 상위 문자열을 반환), startIndex 및 endIndex를 모두 내부 _slice를 통해 반환합니다.
슬라이스가 부모 문자열을 어떻게 지칭하는지 알 수 있습니다.
문자열에 서브 스트링
마지막으로 코드에는 많은 부분이있을 수 있지만 함수의 매개 변수 유형에는 문자열이 필요합니다. 하위 문자열을 문자열로 변환하는 과정도 매우 간단합니다.
string = string (substring)을하자
하위 문자열은 부모 문자열과 동일한 메모리 공간을 공유하기 때문에 새 문자열을 만드는 것이 새 저장 공간을 초기화해야한다고 생각합니다. 그렇다면 문자열을 초기화하는 과정은 무엇입니까?
Extension String {public init (_ substring : substring) {// 1 x = substring._wholestring // 2 start = substring.startIndex let = substring.endindex // 3 let u16 = x._core [start.encodoffset .. <end encodedOffset = "nbsp =" "" "" "" "" "" "" "" " in : = ""x = ""unicodescalars = ""end = ""self = "4b =" "else =" "> </end>하위 문자열을 문자열로 변환하는 단계는 매우 간단하지만이를 수행 해야하는지 고려할 수 있습니다. 서브 스트링 작업을 수행 할 때 유형이 문자열이어야합니까? 하위 문자열의 모든 작업을 문자열로 변환 해야하는 경우 경량 하위 문자열이 의미를 잃게됩니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.