• Home
  • About
    • Develop Woongs photo

      Develop Woongs

      make awesome woongs

    • Learn More
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Swift - String

15 Jan 2019

Reading time ~2 minutes

String

공부하면서 익힌 내용을 정리하고 있습니다. 아직 부족한 부분이나 잘못된 부분이 있을 수 있으니, 있다면 댓글로 피드백 부탁드립니다.

String ?

string은 unicode로 구성되어 있다. 유니코드는 전세계 모든 언어를 나타낼 수 있는데, 바이트 단위로 데이터를 나타낸다.

‘cafe’라는 글자가 있을 때, 강세가 있냐 없냐에 따라서 4개의 유니코드 (c-a-f-e) or 5개의 유니코드 (c-a-f-e-‘)로 나타내질 수 있다. 따라서 이러한 차이로 인해 string은 Int 로 색인되지 않는다. 유니코드는 대신 string.index를 사용한다.

예를 들어보자,

let pizzaJoint = "cafe(`) pesto"
let firstCharacterIndex = pizzaJoint.startIndex // String.index 타입이다.
let fourCharacterIndex = pizzaJoint.index(firstCharacterIndex, offsetBy: 3)
let forCharacter = pizzaJoint[fourCharacterIndex] // e(')

// "pesto" 를 얻어보자.
if let firstSpace = pizzaJoint.index(of: " ") {	// space가 없을 수도 있어서 if let을 사용
	let secondWordIndex = pizzaJoint.index(firstSpace, offsetBy: 1) 	// 두 번째 문장은 공백 바로 뒤 첫번째에서 시작!
	let secondWord = pizzaJoint[secondWordIndex..<pizzaJoint.endIndex] // 두 번째문장 처음부터 문장 끝까지! 
}

// "pesto"를 얻는 다른방법
// 단, 여기선 문장에서 공백이 하나일 때를 가정, 
// separatedBy에 지정한 문자를 기준으로 분리된 요소의 배열을 만들어준다.
// 다음은 공백을 기준으로 분리된 모든 단어들을 갖는다.
pizzaJoint.components(separatedBy: " ")[1]

print String without newline

print()를 통해서 문자열을 출력할 때 줄바꿈을 하지 않고 출력하고 싶을 때가 있다. 예를들어, “Hello” 라는 글자를 H e l l o 와 같이 출력하고 싶다면 어떻게 해야할까?

우선 “Hello”을 한글자씩 출력해보도록 하자.

let word = "Hello"
for value in word {
	print(value)
}

/* 
H
e
l
l
o
*/

결과는 다음과 같이 한 줄에 한 글자씩 출력된다. Swift는 매우 친절(?)해서 C나 C++에서와는 달리 자동으로 줄바꿈을 해주기 때문에 하지 말라고 말을 해줘야 줄바꿈을 하지 않는다.

이때 terminator 명령어를 사용한다. 뜻 자체에서 알 수 있듯이 글자의 마지막을 어떻게 할 지 결정하라는 뜻이다.

이를 사용해서 다시 출력해보면,

let word = "Hello"
for value in word {
	print(value, terminator: " ")
}

// H e l l o

다음과 같이 원하는대로 출력됨을 알 수 있다.

다른 String Method func hasPrefix(String) -> Bool

func hasSuffix(String) -> Bool

var localizedCapitalized/Lowercase/Uppercase: String

func replaceSubrange(Range, with: collection with character)

e.g. s.replaceSubrange(..<s.endIndex, with: "new contens")

다음 예처럼 범위의 한쪽을 생략하면 자동으로 처음 또는 끝의 인덱스를 넣어준다. 하지만 그 타입을 추측가능할 때만 사용할 수 있다.

참고: CS193p



iosswift Share Tweet +1