코테에서 자주 쓰이는 Swift 코드들

OQ·2022년 3월 1일
0

프로그래머스

목록 보기
1/33

숫자 관련

round(2.5)  // 3 (반올림)
ceil(2.1)   // 3 (올림)
floor(2.9)  // 2 (내림)
abs(-1)	// 1 (절대값)

var value = 3.0
value = pow(value, 2)	// 제곱 9.0
value = sqrt(value)		// 루트 3.0

[3, 6, 5].min()	// 3	equal: min(3, 6, 5)
[3, 6, 5].max()	// 6	equal: max(3, 6, 5)

문자 관련

// 문자열 바꾸기
"aaa bbb".replacingOccurrences(of: "aaa", with: "ccc")	// "ccc bbb"

// 문자열 나누기
"aaa bbb".split(separator: " ")	// ["ccc", "bbb"]	// substring으로 와서 나중에 변환할 때 힘듦
"aaa bbb".components(separatedBy: " ")	// ["ccc", "bbb"]	// 코테에서는 이걸 쓰는게 좋다

// 문자열 하나하나 출력
var str =  "ab cd"
for index in str.indices {
    print(str[index])	// "a", "b", " ", "c", "d"
}

// 문자열 배열로 만들기
Array(str)	// 이렇게 간단히 배열로 만들 수 있지만 인자가 Character로 잡힘
str.map { String($0) }	// ["a", "b", " ", "c", "d"]

// 해당 문자 반복하기
String(repeating: "a", count: 10)	// aaaaaaaaaa

// 간편 SubString 및 메서드
extension String {
    // string[2]
    subscript(idx: Int) -> String {
        String(self[index(startIndex, offsetBy: idx)])
    }
    
    // string[1...3]
    subscript (r: Range<Int>) -> String {
        let start = index(startIndex, offsetBy: r.startIndex)
        let end = index(startIndex, offsetBy: r.endIndex)

        return String(self[start...end])
    }
    
    // 범위 삭제
    mutating func removeRange(_ range: Range<Int>) {
        let removeStartIndex = index(startIndex, offsetBy: range.startIndex)
        let removeEndIndex = index(startIndex, offsetBy: range.endIndex)
        removeSubrange(removeStartIndex...removeEndIndex)
    }
}

// 문자열 ㅁ번째까지 지우기
str.removeFirst(3)	// removeLast도 있어요~

// Scanner 사용법
let string = "100-200*300-500+20"
let scanner = Scanner(string: string)
let charSet = CharacterSet(charactersIn: "-+*")

while !scanner.isAtEnd {
	let operatorStr = scanner.scanCharacter()	// 문자 하나 스캔
	let numStr = scanner.scanUpToCharacters(from: charSet)!	// 해당 문자셋에 도달할 때까지 스캔
}

배열 관련

let result = [3, 5, 1, 4].sorted(by: <)	// 오름차순

// 조건을 만족하는 인자값 유무 확인
result.contains(where: { $0 > 4 })

// 집합
let sets = Set<Int>()
print(sets.insert(2))	// true
print(sets.insert(2))	// false (이미 값이 있으므로)
print(sets.update(2))	// nil (값이 없다면 2를 리턴)

// 해당 값으로 이루어진 n의 길이 배열 만들기
var result = Array(repeating: "O", count: n)	// ["O", "O", "O"...]
result.joined() // "OOOOOO..."	// 합치기

루프 관련

// enumerated
for (index, val) in ["aaa", "bbb"].enumerated() {
    print("\(index) \(val)")	// 0 "aaa", 1 "bbb"
}

for i in stride(from: 5 , to: 0, by: -1) {
	print(i)	// 5, 4, 3, 2, 1
}

구조체, 클래스 관련

// Equatable
class A : Equatable {
    var aNum : Int

    init(_ aNum :Int) {
        self.aNum = aNum
    }

    static func ==(lhs: A, rhs: A) -> Bool {
        return lhs.aNum == rhs.aNum
    }
}

// Comparable은 Equatable 상속된 것
class A : Comparable {
    var aNum : Int

    init(_ aNum :Int) {
        self.aNum = aNum
    }

    static func < (lhs: A, rhs: A) -> Bool
    static func ==(lhs: A, rhs: A) -> Bool
}

Date

// 문자열 -> Date -> 밀리세컨드 변환 과정
let timeStr = "20:59:57.421"
let formatter = DateFormatter()
formatter.dateFormat = "HH:mm:ss.SSS"
let date = formatter.date(from: timeStr)
date?.timeIntervalSince1970	// 946727997.421

계속 추가 예정...

profile
덕업일치 iOS 개발자

0개의 댓글