본문 바로가기

전체 글

(159)
swift] json으로 가져온 url(stirng)을 띄어쓰기제거, 한글 인코딩, url 유효성 검사하기 - swift] json으로 가져온 url(stirng)을 띄어쓰기제거, 한글 인코딩, url 유효성 검사하기 json 형식의 데이터를 파싱하여 가져왔을 때 백엔드개발자의 실수나 어떠한 오류로 json의 url 데이터의 값이 오류가 생기는 경우 앱의 이미지를 보여주거나 웹뷰를 보여줄 때 큰 문제를 발생할 수 있다. 그래서 해당 url을 한번 체크(공백제거, 한글 인코딩, url 유효성 체크)를 해주고 앱이 작동되도록 로직을 구현해준다. let freedSpaceString = url.filter {!$0.isWhitespace} //띄어쓰기제거 guard let target = freedSpaceString.addingPercentEncoding(withAllowedCharacters: .urlQuery..
viewWillLayoutSubviews() / layoutSubviews() viewDidLayoutSubviews()/ viewWillLayoutSubviews() 뷰의 bounds가 변하면 뷰는 하위 뷰들의 위치를 조정하는데, 레이아웃이 결정되기 전에 다음과 같은 작업을 수행하고자 할때 이 메서드를 override하여 사용 뷰들을 추가하거나 제거 뷰들의 크기나 위치를 업데이트 레이아웃 constraint를 업데이트 뷰와 관련된 기타 프로퍼티들을 업데이트 layoutSubviews() 뷰의 크기가 변경될 때마다 이에 대응하여 하위 뷰들의 크기&위치 변경되어야 함 -> auto layout을 사용하면 각 뷰의 autoresizingMask프로퍼티를 설정하여 상위 뷰의 크기가 변경되었을 때 어떻게 대응할 지 규칙을 정할 수 있음 뷰의 크기에 변경이 발생하면 우선 하위 뷰들의 autoresizing 동작을 적용하는데, 변경사항..
zsh 쉘 속도 문제 해결 git config --add oh-my-zsh.hide-status 1 git config --add oh-my-zsh.hide-dirty 1
ios] 면접질문 Q. 뷰의 라이프사이클을 이야기하고 viewdidload에서 super을 사용하는이유는 ? override func viewDidLoad() { super.viewDidLoad() } Q. viewDidLoad에서 super.viewDidLoad() 넣어줘야하는지? Q. 객체, 클래스의 인스턴스가 메모리에서 해제되는 시점에 호출되는 것은? A. super는 부모클래스를 의미한다. 오버라이딩(재정의)를 하는 viewDidload에서 부모(super)의 작업을 실핼할지말지 선택하는 것 보통 viewDidload같이 뷰 라이프 사이클은 템플릿 패턴으로 구현되어있다. 뷰 컨트롤러의 뷰가 메모리에 로드될 때 OS에 의해 호출되는 것이기 때문에 super를 붙여주는게 좋다 -> 뷰가로드가되고, 뷰를 만들때 하는 여..
swift] protocol 사용 Delegate 만들어서 사용해보기! UploadPostController.swift에서 프로토콜을 선언해주고 해당 프로토콜을 상속받는 delegate라는 변수를 만들어준다. 이제 해당 delegate를 사용할 곳에서 이렇게 선언을 해주고 이 delegate를 처리할 다른 뷰 컨트롤러에서 이렇게 extension을 사용하여 해당 프로토콜을 상속받고 프로토콜에 전달된 함수를 구현하여 기능을 처리한다.
swift] 네비게이션 바 상단 (와이파이, 시간, 배터리 색상 변경하는법) navigationController?.navigationBar.barStyle = .black barStyle을 블랙으로주면 아래처럼 바뀐다. 색상은 default와 블랙 두 가지이다.
ios] CAGradientLayer - 그라데이션 효과 let gradient = CAGradientLayer() gradient.colors = [UIColor.systemPurple.cgColor, UIColor.systemBlue.cgColor] gradient.locations = [0,1] view.layer.addSublayer(gradient) gradient.frame = view.frame gradient.locations = [0,1]의 숫자를 [0],[0.5]...[1] 이런식으로 변경하면 그라데이션의 효과를 다르게 줄 수 있다.
ios] 코드로 UIImage, UIlabel, UIbutton 화면에 그리기UICollectionViewCell anchor를 각 각 설정하면 코드가 길어지기 때문에 아래처럼 extension을 이용해서 미리 선언을 해준다. extension UIView { func anchor(top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, paddingTop: CGFloat = 0, paddingLeft: CGFloat = 0, paddingBottom: CGFloat = 0, paddingRight: CGFloat = 0, width: CGFloat? = nil, height: CGFloat? = nil) { translatesA..