목록프로그래밍 언어/스위프트 (7)
일모도원(日暮途遠) 개발자
아래와 같은 코드를 처음 봤을때 맨 마지막의 ()가 뭔지 궁금했었다. 결론부터 말하면 함수를 실행할때 함수명 다음에 ()를 붙이는거와 같다. 즉 함수를 실행하고 그 결과 값을 받는거다. 아래 코드에서 ()는 someValue에 {}의 내용을 실행하여 결과값을 할당(割當, assigne)하는 코드이다. 즉 15를 리턴해준다. (아래에서 설명할 함수명()와 동일하다. 함수를 실행시킬려면 함수명 뒤에 ()를 붙여야 하듯이) let someValue: Int = { return 5 + 10 }() print(someValue)를 하게 되면 15이 나온다. 만약 아래처럼 ()를 빼고 실행하면 어떻게 되나 확인해 봤다. let someValue: Int = { return 5 + 10 } someValue를 Int..
빈배열을 만들때는 아래처럼 만든다. var array0 = [Int]() 하지만 [Int]를 좌변에 이렇게 넣으면 에러난다. var array00:[Int] = () // Cannot convert value of type '()' to specified type '[Int]' 배열을 만들때 값을 초기화 시켜줄려면 아래처럼 리터럴로 값을 주면 된다. var array3 = [1, 2, 3] var array31:[Int] = [1, 2, 3] 하지만 [Int]를 우변에 이렇게 넣으면 에러난다. var array31 = [Int][1, 2, 3] // Instance member 'subscript' cannot be used on type '[Int]' 배열을 만들때 같은 값이 여러번 반복되게 할려면 아..
스위프트에서 enum을 swtich문을 쓸때는 모든 케이스를 다 적어주는걸 권장하는거 같다. 일부 빠진 케이스가 있으면 아래처럼 "Switch must be exhaustive" 에러가 난다. 그래서 보통 이렇게 enum의 모든 케이스를 다 적어주던지 아님 이렇게 안적어준 부분을 default로 처리한다. 근데 분명히 모든 케이스들들 다 적어줬는데도 이런 요상한 경고가 뜨기 시작한다. 사용자가 만든 enum "Switch covers known cases, but 'AVAudioSession.RecordPermission' may have additional unknown values, possibly added in future versions" Switch문이 현재 이미 알려진 enum의 케이스들은 ..
파일명이 "movie 9.mp4", "movie 10.mp4", "movie 11.mp4" 처럼 있다. 오름차순으로 정렬할려고 아래처럼 사용하니 files.sort(by: { $0.compare($1) == .orderedAscending } ) 결과가 "movie 10.mp4", ""movie 11.mp4", "movie 9.mp4"처럼 나왔다. 이는 "movie 1"과 "movie 9"가 비교되어서 그렇다. 이럴때는 compare대신 localizedStandardCompare를 쓰면 원하는 방식으로 정렬이 된다. files.sort(by: { $0.localizedStandardCompare($1) == .orderedAscending } ) "movie 9.mp4", "movie 10.mp4", ..
스위프트에는 ~= 라는 특이한 연산자가 있다. 범위 연산자(영어 이름은 Expression Pattern 인거 같다)라고도 하는데 특정 값이 어떤 범위에 있는지 여부를 알려준다. "범위 ~= 특정 값"의 형태로 사용하며 결과는 Bool값으로 반환 된다. 아래 예를 보면 0...10 ~= 5 는 5가 0~10사이에 있으므로 결과는 true이다. 0...10 ~= 20 은 20이 0~10사이에 없으므로 결과는 false이다. let arrayA = 0...10 let a = arrayA ~= 5 let b = arrayA ~= 10 let c = arrayA ~= 20 print("result a : \(a)") //true print("result b : \(b)") //true print("result ..
스위프트 코드를 보다가 아래처럼 func앞에 @objc가 붙어있는걸 봤다. 오브젝트씨에서도 사용할수 있다는 뜻인가 하고 검색해보니 맞네 ^^ @objc func funcName() { .... } https://www.hackingwithswift.com/example-code/language/what-is-the-objc-attribute What is the @objc attribute? - free Swift 5.4 example code and tips Was this page useful? Let us know! 1 2 3 4 5 www.hackingwithswift.com 위 싸이트에서 읽어보니 스위프트는 기본적으로 스위프트에서만 돌아가는 코드를 생성하는데, 아직까지 Objective-C에서도..
스위프트에는 static 함수말고 class함수도 있다. class MyClass { func myFunc() {} class func myClassFunc() {} static func myStaticFunc() {} } 일반적인 함수는 인스턴스 메소드(Instance method)로 객체를 생성한후에 부른다. static함수는 객체를 생성하지 않고 MyClass.myStaticFunc()처럼 클래스명에 붙여서 부르면 되는데 class func는 뭘까? 차이점은 class func는 상속이 된다. 이외는 static func(상속 안됨)와 똑 같다. 둘다 타입 메소드(type method)라 부른다. class SubClass : MyClass { class func myClassFunc() {} st..