궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFT/Grammar

Swift : 기초문법 [Character / String / Any, AnyObject / nil]

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

본 게시글은 yagom님의 Swift 프로그래밍 3판을 참고하여 작성되었습니다.

 

Character

Character는 '문자'를 의미합니다. 단어, 문장처럼 문자의 집단이 아닌 단 하나의 문자를 의미하죠. Swift는 유니코드 9 문자를 사용하므로 영어, 한국어, 이모티콘 등 유니코드에서 지원하는 모든 언어 및 특수기호를 사용할 수 있습니다. 문자를 표현하기 위해서는 값의 앞 뒤에 큰 따옴표를 사용하여 표현합니다.

 

아래 예문은 이모티콘과 한글을 사용한 것인데, 실제로 앱을 개발할때 이모티콘과 한글을 변수로 정하는 방식은 사용하지 않습니다.

let alphabetA: Character = "A"
print(alphabetA) // A

let love: Character = "🥰"
print(love) // 🥰

let 한글로된변수: Character = "ㄱ"
print("\(한글로된변수)") // ㄱ

String

 

 

String은 문자의 나열, 즉 문자열 입니다. StringCharater과 마찬가지로 유니코드 9를 사용할 수 있고, 값의 앞뒤에 큰따옴표를 사용합니다.

let name: String = "서근"

// 이니셜라이저를 사용하여 빈 문자열을 생성할수있음
// 변수var을 사용하여 변수를 생성했기 때문에 문자열의 수정 및 변경이 가능해짐
var introduce: String = String()

// append() 메서드를 사용하여 문자열을 이어붙일 수 있음
introduce.append("저의 이름은")

// 연산자를 사용하여 문자열을 이어붙일 수 있음
introduce = introduce + " " + name + "입니다."

print(introduce) // 저의 이름은 서근 입니다.

// 문자의 수 count
print("name 에 해당하는 글자 개수 : \(name.count)")

// 빈 문자열인지 확인 방법
print("introduce가 비어 있습니까? : \(introduce.isEmpty)")

// 유니코드의 스칼라값을 사용하면 값에 해당하는 표현이 출력됨
let unicodeScalarValue: String = "\u{2665}"
let airplane = Unicode.Scalar(9992)!
let kim: Unicode.Scalar = "김"
print(kim) // 김
print(airplane) // ✈
print(unicodeScalarValue) //♥

String타입 에는 기본적으로 많은 메서드와 프로퍼티들이 구현되어 있습니다. 그 다양한 기능을 한번 간단하게 사용해보면서 알아보도록 할게요.

import Swift

let hello: String = "Hello"
let Seogun: String = "Seogun"
var greeting: String = hello + " " + Seogun + "☺️"
print(greeting) // Hello Seogun☺️

greeting = hello
greeting += " "
greeting += Seogun
greeting += "☺️"
print(greeting) // Hello Seogun☺️

/*===연산자를 통한 문자열 비교===*/

var isSameString: Bool = false

isSameString = hello == "Hello"
print(isSameString) //true

isSameString = Seogun == "seogun"
print(isSameString) // false

/*===메서드를 통한 접두어, 접미어 확인===*/
// 접두어 hasPrefix
var hasPrefix: Bool = false
hasPrefix = hello.hasPrefix("He")
print(hasPrefix) //true

hasPrefix = hello.hasPrefix("he")
print(hasPrefix) // false

hasPrefix = Seogun.hasPrefix("Seo")
print(hasPrefix) // true

hasPrefix = Seogun.hasPrefix("SEO")
print(hasPrefix) // false

// 접미어 hasSuffix
var hasSuffix: Bool = false
hasSuffix = hello.hasSuffix("He")
print(hasSuffix) // false

hasSuffix = hello.hasSuffix("llo")
print(hasSuffix) // true

hasSuffix = Seogun.hasSuffix("gun")
print(hasSuffix) // true

hasSuffix = greeting.hasSuffix("Seogun")
print(hasSuffix) // false

hasSuffix = greeting.hasSuffix("Seogun☺️")
print(hasSuffix) // ture

/*===메서드를 통한 대소문자 변환===*/
var convertedString: String = ""
convertedString = hello.uppercased()
print(convertedString) //HELLO

convertedString = hello.lowercased()
print(convertedString) // hello

convertedString = greeting.uppercased()
print(convertedString) // HELLO SEOGUN☺️

convertedString = Seogun.lowercased()
print(convertedString) // seogun

/*===프로퍼티를 통한 빈 문자열 확인===*/
var isEmptyString: Bool = false
isEmptyString = hello.isEmpty
print(isEmptyString) // false

greeting = ""
isEmptyString = greeting.isEmpty
print(isEmptyString) // true

/*===프로퍼티를 이용해 문자열 길이 확인===*/
print(greeting.count) // 0

greeting = "안녕하세요. 서근개발노트 입니다."
print("greeting의 문자 개수는 \(greeting.count)개 입니다.")
// greeting의 문자 개수는 18개 입니다.

print(Seogun.count) // 6

/*===여러 줄의 문자열을 사용하려면 """ 사용===*/
greeting = """
안녕하세요. 서근입니다.
저는 서근개발노트라는 블로그를 운영중입니다.
앞으로 잘 부탁드리겠습니다.
"""

print(greeting)

특수문자

Swift에는 문자열 내에서 일정 기능을 수행하는 특수문자가 있습니다. 특수문자는 백 슬래시 " / " 에 특정한 문자를 조합하여 사용합니다.

특수문자 설명
\n 줄바꿈 문자
\\ 문자열 내에서 백슬래시 표현할 때 사용
\" 문자열 내에서 큰따옴표 표현할 때 사용
\t 키보드의 Tap을 눌렀을때와 동일한 효과
\0 문자열이 끝났음을 알리는 null 문자
#""# 문자열 맨앞과 뒤에 #을 추가해서 특수문자를 사용하지 않음
\#() 특수문자를 사용하고있지 않을때 문자열보간을 사용하는 법
print("문자열 내부에서 \n이런식으로 특수문자를 사용하면 \\백슬래시와 \"큰따옴표\" 등을 사용할 수 있습니다. 탭기능처럼 \t 이렇게 적용 시킬수 도 있죠.\0")

print(#"문자열 내부에서 특수문자를 사용하기 /n 싫을 때에는 맨앞과 뒤에 #을 넣어줍니다."#)

let number:Int = 100

print(#"특수문자를 사용하지 않고 있을 때도 문자열보간을 사용하려면 \#(number) 이런식으로 사용할 수 있습니다."#)

Any, AnyObject

Any는 스위프트의 모든 데이터 타입을 사용할 수 있다는 뜻입니다. 변수(var) 또는 상수(let)의 데이터 타입이 Any로 지정되어 있다면 그 변수 또는 상수에는 어떠한 종류의 데이터 타입이든지 상관없이 할당할 수 있습니다.

 

즉, Any로 선언된 변수에는 String이든 Double이든 Bool등 어떠한 타입의 값이라도 할당할 수 있습니다.

var SomeVar: Any = "서근"

SomeVar = 100
print(SomeVar) 

SomeVar = 1233.3
print(SomeVar)

SomeVar = true
print(SomeVar)
var things: [Any] = []
 
things.append(10)
things.append(100)
things.append("Seogun")
things.append(false)        
things.append({ print("서근개발노트") })  

AnyObject는 Any보다 한정된 의미로 class의 인스턴스만 할당할 수 있습니다.

var things: [Any] = []
 
things.append(10)  // Argument type 'Int' expected to be an instance of a class
things.append(100) // Argument type 'Int' expected to be an instance of a class
things.append("Seogun") // Argument type 'String' expected to be an instance of a class
things.append(false)    // Argument type 'Bool' expected to be an instance of a class    
things.apeend(Some.init())
things.append({ print("서근개발노트") })  // Argument type '()->()' expected to be an instance of a class

코드를 보면 클래스 타입을 제외한 모든곳에 에러가 났죠?  구조체, 열거형, Reference Type인 클로저도 전부 안됩니다.

TIP
 
 

Any와 AnyObject 사용 비추천
Any와 AnyObject는 될 수 있으면 사용하지 않는 편이 좋습니다. Swift는 타입에 엄격한 언어라고 했었죠? Any또는 AnyObject로 선언된 변수의 값을 가져다 쓰려면 매번 타입을 확인해야하고 변환해줘야 하는 불편함을 초래할 수 있고, 또 예기치못한 오류가 생길수 있기 때문에 타입은 될수 있는 한 명시하는것이 좋습니다.

nil

nil은 특정 타입이 아니라 '없음' 을 나타내는 Swift 키워드 입니다. 다른 언어는 nil이라고 많이사용되죠. 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타내는데 사용합니다. 변수 또는 상수에 값이 없는 경우(nil) 이면 해당 변수 또는 상수에 접근했을 때 잘못된 메모리 접근으로 런타임 오류가 발생합니다. 이러한 오류를 해결하려면 옵셔널을 사용해야 합니다.

또 특정 함수의 반환 타입으로 사용될 수 있는 Never이라는 타입이 있습니다.

 

 

읽어주셔서 감사합니다 🤟

 

 


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.