간단정리 AVAudioSession : 기기의 오디오 장치를 어떤것을 사용할 것인지를 정의. AVPlayer : URL로 오디오 파일/ 영상 파일을 url이 있다면 url을 이용해서 재생할 수 있습니다. AVPlayer 자체는 영상을 재생하는 기능은 없지만, AVKit 또는 AVPlayerLayer를 이용하여 영상을 재생 시킬수있습니다. AVAudioPlayer : 로컬 파일로 저장된 오디오 파일을 재생시킵니다. 단순히 재생, 일시정지만 가능하고, 재생 위치이동, 음의 pitch, 재생 속도등을 제어하려면 AVAudioEngine을 사용해야합니다. AVAudioEngine : AVAudioPlayer과 마찬가지로 로컬파일로 저장된 오디오 파일을 재생합니다. 음의 pitch, 재생 위치, 재생 속도 등등을..
RxSwift를 공부하고 있을때 순환 참조를 막기 위해 [weak self]를 사용습니다. 이때 weak 가 정확히 무슨뜻인지 몰라 찾아보았습니다. [weak self] -> weak ->순환참조-> ARC 이런순으로 꼬리를 물다보니 ARC부터 공부를 했습니다. ARC란? ARC란 메모리 자동 관리를 해주는 장치를 말합니다. 앱이 실행될때 쓰이지 않는 객체들을 메모리에서 제거해줘야지 앱이 효율적으로 실행이 됩니다. 반면 변수에 할당이 되어 쓰이는 객체들은 제거를 하면 안되겠죠? 그래서 ARC가 해당 객체가 쓰이는지, 안쓰이는지를 자동으로 관리해줍니다. 코드로 한번 설명해보죠. class Fruit{ var name : String? var price : Int? init(name : String , pr..
MQTT란? IOT에서 사용하는 프로토콜 중 하나로 구독자와 배포자, 브로커로 이루어져 있습니다. 배포자와 구독자는 client이며, client는 배포자가 될수도 있고, 구독자가 될 수도 있습니다. 배포자는 특정 topic을 통해 브로커에게 데이터를 전송해 데이터를 배포할 수 있고, 구독자는 브로커에게 특정 topic을 구독함으로써 데이터를 받을 수 있습니다. 브로커는 이런 topic을 중앙에서 관리하고, 구독/발행을 총괄합니다. MQTT에도 여러 가지 모델이 있지만, 자세하게 설명하면 복잡하므로 생략. 맥에서 구현을 해봅시다. 아래 사진같은 모양으로 구현 할 것입니다. mosquitto 설치 mosquitto는 mqtt브로커 서버입니다. 맥의 경우 brew를 이용해 설치 할 수 있습니다. brew i..
큐에 해당하는 문제지만 딱히 큐를 쓰지 않아도 되는 문제. 풀이도 어떻게 보면 큐지만 큐가 아닌것. 이번에도 커서를 이용해 풀이했다. stayList에 현재 커서의 위치보다 작은 값의 유무를 Bool로 받는 배열을 생성하고 그 배열에 false가 없을 시 커서의 위치를 +1을 한다. 배열에 false가 있을 시 출력해야 하는 위치를 변경한다. import Foundation func solution(_ priorities:[Int], _ location:Int) -> Int { var nowLocation = location var myQueue : [Int] = [] var count = 1 for item in priorities { myQueue.append(item) } var cursor = 0..
스택/큐 단계의 첫번째 문제. 자료구조를 배운사람이라면 문제를 읽으면 어떤 것을 써야할지 알것이다. 이번문제에서 쓸 자료구조는 큐이다. 다만 Swift에서 스택이나 큐는 구현되어 있지 않으므로 구조체나 클래스 혹은 배열을 써서 대신해야 한다. 원래는 구조체를 써서 구현하려고 하였으나 오히려 더 복잡해져서 배열로 큐의 원리를 구현하였다. myQueue에는 해당 작업이 완료되는데 걸리는 시간을 넣어둔다. 4 1 5 3 2 cursor는 큐에서 dequeue역할을 한다. 4 1 5 3 2 cursor cursor에 해당하는 작업보다 현재 가리키고 있는 작업시간의 이하이면 count에 1을 더하고 cursor에 1을 더한고 answer에 count를 추가한다. cursor에 해당하는 작업보다 더 크면 거기서 중..
프로그래머스 해쉬단계 마지막 문제. 이 문제에서 까먹기 쉬운것이 장르당 최대 2개까지만 추가 가능하다는 점이다. 이 점도 모르고 꽤 헤멨다. 또 이문제에서 헤멧던 것은 장르를 재생수 순서로 정렬을 하고 장르에 해당하는 인덱스 값을 가져오는것이었는데 처음에는 gernes로만 인덱스 값을 가져오려 했지만, 그 경우 노래 양이 많아지면 시간이 오래 걸려 다른 Dictionary를 만들어서 인덱스 값을 가져오게 하였다. 1. songList에 장르당 총 재생시간을 추가한다. 또 장르의 인덱스 값을 value로 가지는 idByValue를 만든다. 2. songList를 재생량 순으로 정렬. 3. songList에서 장르 순으로 인덱스 값을 가지고 있는 idByValue를 통해 plays를 재생 순으로 정렬해서 s..