FloatingPanel 사용해보기

|

개인 프로젝트를 정리한 것입니다.
잘못된 내용이 있다면 편하게 댓글 남겨주세요!


FloatingPanel 사용해보기

우선 자신의 프로젝트를 만들고 cocoapod에 FloatingPanel을 install해준다.

Podfile

pod 'FloatingPanel'

그리고 ContentVC 파일을 하나 만들어준다.

ContentVC

import UIKit

class ContentVC: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet var tableView: UITableView!
    let data = [
        "NewYork",
        "Seoul",
        "Toronto",
        "Boston",
        "Paris",
        "LA",
    ]

    override func viewDidLoad() {
        super.viewDidLoad()
        // 커스텀 셀을 만들어준다
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        tableView.delegate = self
        tableView.dataSource = self
    }


    // data의 수만큼 행이 만들어진다.
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    // 해당 셀에 들어갈 데이터를 지정해준다.
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row]
        return cell
    }
}

위 코드를 보면 알겠지만, mainVC위로 올라올 tableView를 만들어주는 것으로 tableView에 대한 코드들이 작성되어있다.
UITableview.register 참고한 블로그

MainVC

import UIKit
import FloatingPanel

class MainVC: UIViewController, FloatingPanelControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // FloatingPanelController를 하나 생성해준다
        let fcp = FloatingPanelController()
        fcp.delegate = self

        // storyboardID가 FPC_content인 컨트롤러가 있는지 없는지 확인
        guard let contentViewcontroller = storyboard?.instantiateViewController(identifier: "FPC_content") as? ContentVC else {
            return
        }

        // contentViewController 설정
        fcp.set(contentViewController: contentViewcontroller)

        //`FloatingPanelController` 개체가 관리하는 뷰를 self.view에 추가하고 표시
        fcp.addPanel(toParent: self)
    }
}

Storyboard

주의해야할 점

  1. storyboardID를 반드시 작성할 것
  2. tableView cell을 끌어다놓지 않았다는 점
  3. 주의해야할 점은 아니지만 MainVC에 MapViewKit를 사용했다는 점

결과

Build Success 했음에도 시뮬레이터가 돌아가지 않는 경우?

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


Build Success 했음에도 시뮬레이터가 돌아가지 않는 경우?

빌드가 성공적으로 되었음에도 불구하고(build success) 시뮬레이터가 작동하지 않는 경우가 있다.

해결 방법

  • [Product] > [Scheme] > [Edit Scheme] 혹은
  • [프로젝트] > [Edit Scheme]

위 방식으로 들어가서 [Run] > [Info] 에서 [Executable]에 none 이 되었는 지 확인
만약 none이라면 본인의 프로젝트를 선택해준다! 이후 close!

git reset --hard origin/master 한거 취소하기(git reflog)

|

개인적인 연습 내용을 정리한 글입니다.
더 좋은 방법이 있거나, 잘못된 부분이 있으면 편하게 의견 주세요. :)


문제상황

개발을 하던 중 대박 실수를 하나 했었다.

  • local에 있는 파일을 깃헙에 push하려고 하는데 reject가 되었다.
  • 이전에도 비슷한 충돌은 많아가지고 git conflict해결 요거 참고하며 진행하는순간
  • 초기 파일만 남은채 그냥 다 사라져버렸다. 아니지 초기파일도 아니고 그냥 텅빈 파일 이름들만 남아있었다….
  • 구글링하며 설명을 찾아보니
  • “만약, 로컬에 있는 모든 변경 내용과 확정본을 포기하려면 아래 명령으로 원격 저장소의 최신 이력을 가져오고, 로컬 master 브랜치가 저 이력을 가리키도록 할 수 있어요”
  • 즉, 내 로컬은 텅 비어있던 깃헙을 역 push 해버려 텅빈 파일들만 남아있게 되었다…

git reflog

ref는 reference를 의미한다 > reference log

  • 사진을 보면 우선 위에서부터 아래로 커밋이 진행된 것을 볼 수 있다.
  • 내가 뭐가 뭔지를 몰라서 reset이 좀 남발이 되어있는데
  • 여튼 53d8에 있어야 할 HEAD가 잘못사용한 reset으로 인해 1b31까지 갔던 것을 볼 수 있다

이때 git reset -hard HEAD@{몇번전의 행동} 명령어를 통해 각각의 커밋 id를 대체할 수 있다.

즉 나는 git reflog를 통해 본 HEAD{3}행동으로 돌아가야 하니까(현재 HEAD{1}에 있고)
git reset -hard HEAD@{3}이라는 명령어를 통해 커밋을 돌려놓았다.

즉 이 명령어를 통해 우리가 할 수 있는 일은 아래와 같다.

  1. 원하는 몇번째 전의 행동으로 해당 과정을 되돌려 놓거나
  2. reset으로 잘못 삭제한 커밋을 되살리기 위해 사용한다.

Terminal에서 git 언어 설정 변경하기

|

개인 공부 내용을 정리한 글입니다.
잘못된 내용이 있다면 편하게 댓글 남겨주세요!


문제 상황

  • 터미널에서 git이 계속 한글로 출력되어 나왔다.
  • git을 사용할때 한글로 나오면 물론 편한점도 있겠지만 에러가 나는 경우
  • 구글링을 해야하는 경우가 많은데, 한글로 나오는 에러는 구글에서 찾기가 쉽지 않다.
  • 따라서 무엇을 사용하든 영어로 사용하는 것이 훨씬 좋다.

해결 방법

나는 zsh을 사용하기 때문에 zsh에서의 해결방식을 보여줄 것이지만
bash에서도 설정 명령어는 같기에 그대로 진행해도 괜찮을 것이다.

우선 터미널에서 zshrc로 진입한다.

vi ~/.zshrc

그리고 아래 명령어를 적어준다

# Set Git language to English
alias git='LANG=en_GB git'

위 명령어 저장 후 나와서 터미널에 아래를 작성하면 끝!

source ~/.zshrc

면접 본 내용 정리하기

|

개인 공부 내용을 정리한 글입니다.
잘못된 내용이 있다면 편하게 댓글 남겨주세요!


면접본 내용

  • 강한참조가 걸리는 실제 Use case > 클로저 :이를 해결하기 위한 unonwned, weak

  • Protocol, extension

실제 프로토콜을 사용하는 때 어떤때 사용하냐
> delegate 등등
Extension을 사용할때의 제약 사항 > 프로퍼티와 함수
프로토콜 익스텐션
  • Convienience init 과 designated init 의 차이점과 제약사항
  • 그리고 굳이 designated를 사용해서의 한계점 > 상속 오버라이딩

  • Viewcontroller 생명주기
  • 실제 view에 컴포넌트가 제대로 자리잡는 순간은 언제? > view did appear
  • 그리고 얘네가 짝을 맞춰서 해야하는 때가 언제인가? > KVO, notification center

  • Codable 의 원칙 얘는 뭐하는 애인가

  • Class, struct, enum의 차이
  • 언제 class와 struct를 구분해서 사용하는가? > 상속의 문제?

  • 프로토콜 지향 프로그래밍과 객체지향 프로그래밍

  • 접근제어자

  • Http https + Ssl 인증서

  • Ats > http를 설정했는데 이러면 깨지는거 아닌가?

  • objectiveC 와 swift의 차이점

  1. 실제 프로젝트에서 사용한 uiview 컴포넌트들은 무엇이 있는지?
  2. 왜 라이브러리를 바꿨는지?
  3. 장고 파이썬 그러니까 서버단에서 클라이언트단으로 바뀌게 된 계기
  4. 어디서 공부하고
  5. 공식문서는 뭘보고 그걸 보겟다 생각한 이유
  6. 프로젝트하면서 가장 기억에 남는 에피소드