자바의 참조타입은 Call by Value로 동작한다길래, swift의 개념도 흔들려서 이번기회에 꽉 잡기위해 포스팅한다. 누구나 알고 있겠지만 Call by Value, Call by Reference를 정의 하면 Call by Value 값을 복사하여 처리한다 Call by Reference 주소를 참조하여 처리한다. 여기서 헷갈린 개념이, 그러면 참조 타입은, 주소 값을 가지고 있고, 다른 변수에 할당 할 때, 이 값을 복사해서 다른 변수에 할당하는 것인지를 헷갈렸다. 결론부터 말하자면, 주소를 복사해서 다른 변수에 할당하는 것이 아닌, 참조 그 자체를 복사한다. 즉 주소값을 복사하는게 아니다. class A { var a: Int = 0 } var classA = A() var classB = c..
let circlePath = UIBezierPath(arcCenter: completeButton.center, radius: completeButton.frame.width/2, startAngle: 0, endAngle: .pi * 2, clockwise: true) let shape = CAShapeLayer() shape.path = circlePath.cgPath shape.fillColor = UIColor.red.cgColor completeButton.layer.addSublayer(shape) UIBezierPath로 원을 completeButton과 같은 크기와 위치에 그리려고 했는데, center가 일치하지 않는 문제가 발생. 원인 UIView의 center는 슈퍼뷰를 기준으로 해당..
이번에는 기획자가 간단한 기능을 하나 추가해 달라고 합니다. 기존에는 이미지만 볼 수 있다면, 이번에는 영상도 볼 수 있게 해달라고 하네요. 일단은 영상을 재생시킬수 있는 뷰를 하나 만들어주겠습니다. final class VideoView: UIView { private var url: String? private var player = AVPlayer() private var playerLayer: AVPlayerLayer? private lazy var videoBackgroundView: UIView = { let view = UIView() view.backgroundColor = .systemGray view.translatesAutoresizingMaskIntoConstraints = fals..
프로토콜 지향 프로그래밍에 관해 공부를 하다가 우연히 해당 발표를 찾아서 여기에 나와있는 프로젝트를 진행해 보았습니다. https://www.youtube.com/watch?v=9gkzHUsQiUc&t=1138s 저희는 이제 사진첩 앱을 개발하려고 합니다. 사진첩은 테이블 뷰 모드와 콜렉션 뷰 모드를 지원하고, 각 셀을 클릭 하면 이미지를 크게 볼 수 있는 화면으로 이동합니다. 딱 보기에도 중복되 보이는 기능이 여럿 보입니다. 이미지와 설명, 테이블뷰와 콜렉션뷰는 같은 이미지를 저장하고 있는 배열을 공유하고, 셀을 클릭하였을때 동일한 페이지로 이동하는 기능이 중복되어 있습니다. 일단 UI부터 구성을 해보겠습니다. 테이블뷰와 콜렉션뷰는 이미지와 이미지 설명을 각각 가지고 있습니다. 이를 프로토콜로 선언해 ..
POP를 준수하면서 프로젝트를 진행하던 중 API에서 데이터를 받아오는 작업을 해야 할때, 평소 같으면 해당 작업을 담당하는 클래스를 하나 만들어서 작업을 하겠지만, POP를 이용한 프로젝트를 하던 참이였길래, 별 생각 없이 프로토콜을 우선적으로 구현하고 있었습니다. 그런데 해당 프로젝트에서는 코드를 재사용할 필요가 없을때에도 프로토콜로 추상화를 해야하나 이 생각이 들었습니다. final class NetworkManager{ static let shared = NetworkManager() func fetchImageList(url: String, completion : @escaping ([ContentResponse]?) -> ()){ guard let url = URL(string: url) el..
Delegate 패턴을 사용할때 순환참조를 막기위해 protocol에 AnyObject를 상속 받습니다. AnyObject를 상속받지 않을시 delegate앞에 weak를 붙일경우 오류가 생기는것을 볼 수 있습니다. 'weak' must not be applied to non-class-bound 'DrawWaveFormManagerDelegate'; consider adding a protocol conformance that has a class bound 라는 에러가 뜹니다. 해석하자면 weak는 class에 타입에서만 사용가능한데, 해당 프로토콜은 어디서 사용할 지 모르니 weak를 붙일수 없다고 합니다. 그렇다면 class를 붙이면 되는데 왜 AnyObject를 붙여야 할까요? Zedd님 블로그..