본문 바로가기

프로그래밍/SWIFT

(33)
[Swift] error: ambiguous use of 'split(separator:maxSplits:omittingEmptySubsequences:)' 너무 간단한 코드를 짜는데, 너무 이상한 에러가 발생했다. 코드가 풀려고 하는 문제는 문자열을 단어별로 분리해서, 가장 짧은 단어의 길이를 찾는 것이다. 빈칸이 포함된 어느정도 길이의 문자열이 인자로 주어지고, 빈칸으로 단어가 나누어진다. 푸는 알고리즘은 간단하다 주어진 문자열을 빈칸으로 나누어 ( spllit 메소드 ) 단어의 시퀀스로 만든다 시퀀스의 각 단어의 길이를 .count 로 구한다. 이를 매핑해서 단어길이의 시퀀스로 변환한다. 단어길이의 시퀀스에서 가장 작은 것을 .min() 으로 구한다. 코드를 보면 한줄로 끝이 난다. (아래 코드는 가독성을 위해 줄바꿈을 추가.) func find_short(_ str: String) -> Int { return str.split(separator: " ..
[Swift] Counter 구현하기 via codewars codewars 를 풀다가 한줄짜리 카운터 구현이 있어서 옮겨본다. 한눈에 이해가 안 되서 옮겨보는 것임. 카운터라고 하면, 일련의 시퀀스 (리스트, 어레이로 주어진) 가 주어지고, 각각의 갯수를 세는 것을 말한다. python 에는 collections 에 Counter 라는 클래스를 간단히 이용하면 된다. 코드는 다음과 같다. func counter(_ seq: [Int]) -> [Int:Int] { return Dictionary( seq.map { ($0, 1) }, uniquingKeysWith: +) } // ViacheslavTronewsky@codewars 딕셔너리는 두개짜리 튜플의 시퀀스를 받아서, 딕셔너리로 바꿔주는데, 중복되는 키가 있을 때 어떻게 처리할지를 결정하는 인자가 uniqu..
[Swift] 소인수분해 swift 로 소인수분해하는 코드를 짜 봤다. 정수를 인자로 주면, 그 정수의 소인수분해를 (소수, 거듭제곱수) 의 어레이로 반환한다. 1은 빈 어레이를 반환한다. #!/usr/bin/env swift import Foundation func primeFactors0(_ n: Int) -> [(Int, Int)] { var factors: [(Int, Int)] = [] var p = 2 var pow = 0 var n = n while p * p 0 { factors.append((p, pow)) } p += 1 pow = 0 } if n != 1 { factors.append((n, 1)) } return factors } func primeFactors(_ n: Int) -> [(Int, Int)]..
[Swift] swift 단일 스크립트 파일을 컴파일하기 command line arguments 들을 처리하는 기능을 간단한 .swift 스크립트를 작성하여 테스트하려 했다. 간단한 테스트코드들은 컴파일한 실행파일이 아닌, 스크립트로 형식으로 실행하여 테스트하였었는데, 스크립트로 실행할 때에는, 신경쓰지 않았던 많은 실행인자들이 부가적으로 붙어 있었다. 메인 실행파일도 스크립트파일이 아니었다. 그래서, 스크립트 소스를 컴파일하여 단일 실행파일을 만들 수 있는 방법이 있는지 찾아봤다. 아주 간단하게 가능하다. swiftc my_script.swift -o my_program my_script.swift 파일을 컴파일 하려면, 셸에서 위와 같이 실행하면, my_program 이란 이름의 실행파일이 만들어진다. 컴파일러라서 swift 가 아닌 마지막에 c 자가 붙..
Swift 북마크 스위프트 동시성에 대한 모든것 1, 2017년 8월 포스팅 (추가일 : 2022-06-21) https://blog.canapio.com/128 리눅스에서의 스위프트 개발 (스위프트 설치, vscode 설정 등등) (추가일 : 2022-06-08) https://www.raywenderlich.com/8325890-a-complete-guide-to-swift-development-on-linux Pipe Child Process Together https://forums.swift.org/t/pipe-child-processes-together/12527 Running Child Process with Standard Input and Output https://developer.apple.com/fo..
[Swift] dependency <library> in target <project> requires explicit declaration; reference the package in the target dependency with '.product(name: <library>, package: <library package>)' swift package를 사용해서 프로젝트를 생성하고, Package.swift 에 필요한 디펜던시 package 를 추가하는 연습을 하는 중에, 아래와 같은 에러가 발생했다. 생성한 프로젝트는 Banner 라는 이름의 프로젝트였고, swift-argument-parser 의 ArgumentParser 를 이용하려고, Package.dependencies 에 .package(url: "https://github.com/apple/swift-argument-parser", from: "0.0.1"), 을 추가했다. 그리고, Package.targets.executableTarget.dependencies 에 "ArgumentParser"를 추가했다. 이렇게 추가한 Package.swift 파일은 다음과 ..
Swift Closure error: ambiguous use of operator 기초문법을 훑고 있습니다. closure 라는 것이 나와서, 가장 간단한 축약표현을 한번 써보고 싶었습니다. 그런데, error: ambiguous use of operator '+' 라는 에러가 발생하네요. 코드는 아래와 같습니다. for ab in [ [1,2], [3,4] ] { let a = ab[0] let b = ab[1] for op in [ { $0+$1 }, { $0-$1 } ] { print(a, b, op(a, b)) } } 코드의 의도는 정수쌍에 대해서 더하기도 해보고, 빼기도 해보고 그 결과값을 확인해 보는 겁니다. 더하기와 빼기 같은 연산자를 for 루프에 돌려보기 위해서, closure 를 만들어 썼습니다. 에러메시지는 for op in 라인에서 { $0+$1 } 부분의 + 를..
Swift Optional 몇가지 실험 swift 문법을 조금 공부해 봤는데, Optional 이라는 개념이 나한테는 새로운 개념이라 몇가지 실험을 해 보았다. 우선 Optional 을 내가 이해한 것은 아래와 같다. swift 에서 변수는 디폴트로 nil 을 허용하지 않는다. 이렇게 하는 편이 예상치 못한 NPE 오류를 방지하는 디자인이다. (내 추측) 하지만 nil 이 필요한 변수가 있을 수 있다. 그래서 nil 도 assign 할 수 있는 Optional 변수형을 따로 만들었다. Optional 은 nil 또는 값을 assign 할 수 있다. 값이 들어가 있을 때에도 Optional(값) 형태로 한번 포장되어 있는 상태다. 사용하려면 좀 번거롭지만, unwrap 작업이 필요하다. unwrap 을 할 때에는 nil 인지를 먼저 확인하는 것..