Swift 기초부터 차근차근! (2)

4697 단어 swiftswiftuiswift

튜플 (Tuple)

서로 다른 타입의 여러개의 데이터 값을 묶어서 처리할 수 있습니다.

var (num, str) = (12, "ㅇㄴㅇ");
var tuple = (one:1, two:2);
var tup = (1 ,2, 3);

print ("number : ", num, "string: ", str);
print ("tuples: ", tuple.one, tuple.two);
print ("tup : ", tup.0, tup.1, tup.2);

형식을 보면 배열과 비슷하게 보이지만 (배열과 같이 인덱스로 값을 불러옵니다.)
튜플은 크기가 고정이 되어있어 데이터가 추가, 삭제 될 수 없습니다.
또한 처음 설정된 타입에 다른 타입이의 값이 재지정 될 수 없습니다.

tuple = (one: "one", two : 2);
//error 
tuple.three = 3;
//error            Value of tuple type '(one: Int, two: Int)' has no member 'three'

배열 (Array)

배열은 다른 언어에서도 많이 사용하는데 자신이 알고 있는 언어의 배열과 비교하면서 공부하시면 더욱 더 도움이 됩니다. ;)

선언

var arr1 : Array<Int> = [];
var arr2 : [Int] = [];

// var arr2 = [] ; // error

var arr3 = [Int]();
var arr4 = Array<Int>();
var arr5 = [1,2,3,4];

// var arr6 = [1,2,"3", "4"]; error 

var arr6: [Any] = [];
var arr7 : Array<Any> = [];
var arr8 = Array(1..4);
var arr9 = [Int](repeating: 1, count: 4); // [1,1,1,1]

마지막에 보면 타입 지정을 해주지 않아도 알아서 타입 유추를 해주어 지정을 해줍니다.
하지만 타입을 섞어서 배열을 만들고 싶을 때에는 배열의 타입을 Any로 지정을 해주어야 합니다.

(int랑 string 섞어서 쓰먼 에러 발생, int랑 double이랑 섞어쓰면 에러 발생 안 하는데.. 왤까요..)

추가

var arr : Array<Int> = [1,2,3,4];

arr.append(5); // [1, 2, 3, 4, 5]
// 배열의 타입에 맞는 1개의 데이터만 추가할 수 있다.

arr += [6,7,8]; // [1, 2, 3, 4, 5, 6, 7, 8]

arr.append(contentsOf: [9, 10]); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

arr.insert(11, at: 0); // [11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

arr.insert(contentsOf: [12, 13,14, 15], at: 1); 
// [11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

배열에 값을 뒤에 추가 하고 싶을 때에는 append 나 + 를 사용하면 되고 원하는 인덱스부터 추가하고 싶을 때에는 insert를 사용하시면 됩니다.

삭제

var arr = [1,2,3,4,5];
var val : Int? = nil;
var valArr : ArraySlice<Int>? = [];

val = arr.remove(at: 0);
//arr: [2, 3, 4, 5] val: 1

arr.removeAll();
//arr: []

arr = [1,2,3,4,5,6,7];

val = arr.removeFirst();
valArr = arr.dropFirst();
//arr: [2, 3, 4, 5, 6, 7] val: 1 valArr : [3, 4, 5, 6, 7]

val = arr.popLast();
valArr = arr.dropLast();
//arr: [2, 3, 4, 5, 6] val: 7 valArr : [2, 3, 4, 5]

remove는 원하는 인덱스에 있는 값을 삭제하고 그 삭제 한 값을 리턴해 줍니다.
removeAll은 배열의 모든 값을 삭제해 주고
removeFirst는 맨 첫번째, removeLast는 맨 마지막 값을 삭제해주고 그 값을 리턴 해 줍니다.
dropFirst는 맨 첫번째, dropLast는 맨 마지막 값이 삭제된 배열을 리턴해 줍니다.

수정

var arr = [1,2,3,4,5];
var val : Int? = nil;

arr[3] = 444; // [1,2,3,444,5]

arr[0...2] = [111,222,333]; // [111, 222, 333, 444, 5]

arr[0...2] = [1111,2222,3333,4444,5555];
// [1111, 2222, 3333, 4444, 5555, 444, 5]

arr[0...2]와 같이 원하는 범위를 지정해서 한꺼번에 값을 변경할 수 있습니다.
지정한 범위를 넘어가는 값이 들어가도 알아서 처리됩니다. (신기 !!)

유용한 배열 메소드

var arr : [Int] = [0,9,2,5,1,8,11];

var re : [Int] = arr.sorted(by: <);
sorted는 기존의 배열은 건들이지 않고 새롭게 정렬된 배열을 리턴

print(re, arr);
re : [0, 1, 2, 5, 8, 9, 11] 
arr : [0, 9, 2, 5, 1, 8, 11]

arr.sort(by: <);
sort는 기존의 배열을 새로 정렬합니다.

print(arr);
arr : [0, 1, 2, 5, 8, 9, 11]

배열 정렬하는 명령어 sort, sorted 는 (by : >, <) 에 따라 내림차순 오름차순이나 내림차순으로 정렬할 수 있다는게 직관적인 것 같아서 좋다.

var arr : [Int] = [5,4,3,2,1];

var re : [Int] = arr.reversed();
기존의 배열은 건들이지 않고 거꾸로 정렬된 새배열을 리턴

print(re, arr);
re : [1, 2, 3, 4, 5] 
arr : [5, 4, 3, 2, 1]

arr.reverse();
기존의 배열을 거꾸로 정렬합니다.

print(arr);
arr : [1, 2, 3, 4, 5] 
var arr = [1,2,3,4,5];

arr.count // 5
배열의 길이
arr.first; // 1
처음 값 불러오기
arr.last; // 5
마지막 값 불러오기

arr.min(); // 1
최솟값 불러오기
arr.max(); //5
최댓값 불러오기
var arr = [1,2,3,5,3];

arr.firstIndex(of: 3); // 2
배열의 인수로 들어간 값의 맨 처음보이는 인덱스
arr.contains(2); // true
배열에 값이 있는 true, false 리턴

좋은 웹페이지 즐겨찾기