개발자 코드(Code)/Swift(문법)

Swift 02. 데이터 타입

Chain X 2020. 8. 20. 18:24
728x90
반응형
import Cocoa

// ----------------------------------- //
// 내 PC의 OS 크기 확인
// ----------------------------------- //

print("Int :" + String(Int.min) + " ~ " + String(Int.max)) // 디폴트 값Int :-9223372036854775808 ~ 9223372036854775807
print("Int :" + String(Int8.min) + " ~ " + String(Int8.max)) // 8비트 Int :-128 ~ 127
print("Int :" + String(Int16.min) + " ~ " + String(Int16.max)) // 16비트 Int :-32768 ~ 32767
print("Int :" + String(Int32.min) + " ~ " + String(Int32.max)) // 32비트 Int :-2147483648 ~ 2147483647
print("Int :" + String(Int64.min) + " ~ " + String(Int64.max)) // 64비트 Int :-9223372036854775808 ~ 9223372036854775807


// ----------------------------------- //
//    기본 데이터 타입
// ----------------------------------- //

/*
 Swift의 기본 데이터 타입
 Bool, Int, UInt(지구 인구 가능), Float, Double, Character, String  // 전부 첫 글자가 대문자로 쓴다.
  */


// Bool

var someBool : Bool = true
someBool = false
// someBool = 0  (swift는 0,1이 true, false 가 아니라 그냥 true, false이다.

// Int
var someInt : Int = -100
someInt = Int(100.1)
someInt = 100_000 //== 100,000 구분해서 쓸 수 있다.
someInt = 100_00_00
print(someInt)





// UInt
var someUInt : UInt = 100
// someUInt = -100
// someUInt = someInt

// Float
var someFloat : Float = 3.14
someFloat = 3
someFloat = 10_000.44_556
 
//Double
var someDouble: Double = 3.14
someDouble = 3
someDouble = 10_000.44_557
someDouble = Double(someFloat)

print("Printing\(type(of: someDouble)) : \(someDouble)")  // 타입을 확인해야 한다.

// 숫자 Type 변환
let doubleNum = 4.999999
var castToInt = Int (doubleNum) // 소수점을 다 없앤다.
var roundtoInt = Int(doubleNum.rounded()) //반올림해서 값을 더한다.
print("Origin:" , doubleNum, "After Cast:", castToInt, "After Rounded:", roundtoInt)


//Character는 한 글자만 가능하다.
var  someCharacter : Character = "🦑" // swfit는 유니코드를 100% 변환한다.
print(someCharacter)
someCharacter = "가"
someCharacter = "A"
//someCharacter = "하하하하"

// String
var someString: String = "하하하하하🐙"
someString += "웃으면 복이와요"
print(someString)
//someString = someCharacter
someString = """
    여러줄 문자열을
    사용할 수 있습니다.
    첫 줄과 끝 줄에서 줄바꿈을 하지 않으면
    에러가 발생합니다.
"""
                    // 밑에는 글씨가 사이에 있어야 한다.
//someString = """aaa"""
print(someString)

//문자열과 특수문자
// \t, \n, \r, \", \'
print("aa\tbb\tcc")
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
print(wiseWords)

// 유니코드
// 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 국제 표준어

let dollaSign = "\u{24}"
print (dollaSign)

let blackHeart = "\u{2665}"
print(blackHeart)

let jang = "\u{C7A5}\u{D0DC}\u{C601}"
print(jang)


//빈 문자열 초기화
var emtypString = ""
var anotherEmptyString = String()

// 빈 문자열 확인
//. 밑은매소드
//스위프트는  \() 괄호 안에는 함수
if emtypString.isEmpty{
    print("Nothing to see here")
}

// 문자열 수정
var variableString = "Horse"
variableString += "and carriage"
print(variableString)

// 문자열의 개별 문자를 출력
for character in variableString{
    print(character)
}

// 문자 상수 선언
let exclamationMark: Character = "!"

// 문자 배열을 이용한 문자열 출력
let catCharacters : [Character] = ["C","a","t","!","🐙"]
let catString = String(catCharacters)
let catString1 : String = String(catCharacters)
print(catString,catString1)


// 문자열과 문자의 결합
let string1 = "hello"
let string2 = "there"
var welcome = string1 + string2
print(welcome)

// 붙이는 방법
print (welcome + "!")
let excalamationMark1 : Character = "!"
welcome.append(excalamationMark1)
print(welcome)

// -------
let multiplier = 3
print("\(multiplier) times 2.5 is \(Double(multiplier)*2.5)")
// 3 times 2.5 is 7.5

// 문자 길이
let str = "12345,6789"
print("str has \(str.count) characters.")  //스위프트로 빅데이터 사용가능

//문자열 인덱스
let greeting = "Guten Tag!"
greeting[greeting.startIndex]
greeting[greeting.index(before: greeting.endIndex)]
greeting[greeting.index(after: greeting.startIndex)]
let index = greeting.index(greeting.startIndex, offsetBy: 7)  // 이부분에서 스위프트를 처음써본 개발자들이 많은 에러가 생긴다. 유의해서 사용하자
greeting[index]

//문자열의 개별 문자 접근
for index in greeting{
    print(index)
}
//indices가 0번 부터 몇번까지 번호가 있다고 알려준다.
for index in greeting.indices{
    print("\(greeting[index])", terminator:",")            //terminator 사용법 알아두기
}

// 문자의 삽입과 삭제
var welcome1 = "hello"
welcome1.insert("!", at: welcome1.endIndex)
print(welcome1)

// a.문자 삽입
welcome1.insert(contentsOf: " there", at: welcome1.index(before: welcome1.endIndex))
print(welcome1)

// b.문자 삭제
welcome1.remove(at: welcome1.index(before: welcome1.endIndex))
print(welcome1)

//  시작 : 스위프트로 스크랩파이가 가능하다.
// 파이썬에서 비슷한거는 [1:6]
let range = welcome1.index(welcome1.endIndex,offsetBy: -6)..<welcome1.endIndex  // 범위 : 어디부터 어디까지..<welcome1.endIndex는 범위를 잡아주는거 많이쓴다. 알아두기

welcome1.removeSubrange(range)
print(welcome1)


// 부분 문자열    for 문 및 if문을 거의 사용하지 않고 돌리는 방법! 스위프트!
let greeting1 = "Hello, World"
let index1 = greeting1.firstIndex(of: ",") ?? greeting1.endIndex
let beginning = greeting1[..<index1]
print(beginning)

//print(type, of:)

//접두사와 접미사
let romeoAndJuliet = [
    "Act 1 Scene 1 : Verona, A public place",
    "Act 1 Scene 2 : Capulet's mansion",
    "Act 1 Scene 3 : A room is Capulet's mansion",
    "Act 1 Scene 4 : A street outise Capluet's mansion",
    "Act 1 Scene 5 : the Greet Hall in Capluet's mansion",
    "Act 2 Scene 1 : Outside Capulet's mansion",
    "Act 2 Scene 2 : Capulet's orchard",
    "Act 2 Scene 3 : Outside Friar Lawrenece's cell",
    "Act 2 Scene 4 : A street in Verona",
    "Act 2 Scene 5 : Capulet's mansion",
    "Act 2 Scene 6 : Friar Lawrenece's cell"
]

var act1SceneCount = 0
for scene in romeoAndJuliet{
    if scene.hasPrefix("Act 1 "){ //prefix 는 True/ False값이다. "Act 1" 있는게 있나?
        act1SceneCount += 1
    }
}
print("There are \(act1SceneCount) scene in Act 1.")

// 문자열중 끝 부분이 Capulet's mansion의 갯수와 Friar Lawrence's cell의 갯수 출력
// 6 mansion scenes; 2 cell scenes


//var act1SceneCount = 0
//var act1SceneCount1 = 0
//
//for scene in romeoAndJuliet{
//    if scene.hasSuffix("") {
//    }
//}



// Any, AnyObject, nil
/*
 Any : Swift의 모든 타입을 지칭하는 키워드
 nil : null
 */

// Any (숫자 , 문자 ) 둘다 가능
// 단점 : 메모리를 많이 사용한다.
var someAny: Any = 100
someAny = "어떤 타입도 수용 가능합니다."
print(someAny)

someAny = 123.12
print(someAny)

// ! : null 에 값을 준다.(?)
// optional :
let someAny1: Double = someAny as! Double
print(someAny1)


// nil
/*
 - nil은 없음을 의미하는 키워드.
 - 다른 언어의 NULL, Null, null, NaN, NA 등과 유사한 표현 입니다.
 */

//someAny1 = nil

// Tuple
// Tuple 사용전
var dialCode = 82
var isoCode = "KR"
var name = "Korea"

print(dialCode, isoCode, name)

// Tuple의 사용
// 스마트폰은 메모리를 신경써야한다!
// Xcode는 시뮬은 되지만 실제폰은 안될 수도 있다!
// 반드시 테스트해야 한다.
var country = (82, "KR", "Korea")
print(country.0,country.1,country.2)


var country1 = (dialCode1: 82, isoCode1:"KR", name1:"Korea")
print(country1.dialCode1)

/*
 person <- (John Doe, 201 Main Street, 35)
 
 John Doe lives at 201 Main Street and is 35 years old.
 */

var person = (name:"John Doe",address:"201 Main Street",age:"35")
print(person.name,"live at",person.address, "and is", person.age, "years old")
반응형

'개발자 코드(Code) > Swift(문법)' 카테고리의 다른 글

Swift 06.컬렉션 set집합연산  (0) 2020.08.20
Swift 05. 컬렉션 Dictionaray  (0) 2020.08.20
Swift 04.컬렉션 Aarry  (0) 2020.08.20
Swift 03.기본 연산자  (0) 2020.08.20
Swift. 01_상수와 변수  (0) 2020.08.20