본문 바로가기
개린이 이야기

2022년 03월 04일의 이야기

by iOS 개린이 2022. 3. 4.

1. 스위프트 딥 다이빙(Struct vs Class)

-struct MyStruct{  }    /   class MyClass : SuperClass {  }   

-struct는 class와 다르게 상속이 불가능하지만 상속을 제외하면 class와 기능이 유사하다. 

-class에서는 참조가 가능하기 때문에 조심해야 한다. 

 let skeleton1 = enemy(health: 100, attackStrength: 10)

 let skeleton2 = skeleton1

 skeleton1.takeDamage(amount: 10)

이 코드를 보면 데미지를대미지를 입은 것은 스켈레톤 1이지만 스켈레톤 2에도 똑같이 대미지를 입는다. 왜냐하면 스켈레톤 2가 1을 참조했기 때문이다. 새로운 스켈레톤 2로 enemy class를 사용하고 싶다면 skeleton1을 참조하는 것이 아니라, class enemy를 사용해야 한다.

 

-struct에서는 class의 참조와는 달리 스켈레톤2에는 대미지를 입지 않는다. 하지만 구조는 변경할 수 없기 때문에 구조를 변경하기 위해서는 돌연변이(immutable)를 사용해야 한다. 

 

-struct에서는 value로 값을 전달한다. 예를 들면 내가 사진을 갖고 있고 다른 사람에게 사진을 주고 싶을 때 사본을 만들어서 전달하는 것이다. 

-class에서는 reference 전달된다. 예를들면 사진을 전달할 때 내 사진 파일의 위치가 어디인지 알려주는 것이다. 

-따라서 struct에서는 사진의 사본을 여러개 뿌렸을 때 그중 한 개의 사진 내용을 변경시켜도 다른 사진들은 전혀 이상이 없고, class에서는 누군가가 사진의 내용을 변경시키면 원본이 변경되는 것이기 때문에 모든 사람들이 피해를 보게 되는 것이다. 

 

2. xcode에서 문서를 사용하고, 사용자 지정 UIviewController 클래스를 만드는 방법.

-import foundation은 foundation 프레임워크를 가져오는 것이다. 애플에서 ios 앱을 많이 개발하는 우리의 경험을 만들기 위해서 작성한 코드의 무리이다. 하지만 UIviewController를 사용하기 위해서는 UIKit를 가져와야 한다. UIKit는 우리가 사용하는 UI로 시작하는 것들의 프레임워크이다. 

-또한 UIKit는 foundation을 포함하고 있는 더 큰 프레임워크이기 때문에 UIKit만 가져다가 사용하면 된다. 

 

3. UI를 프로그래밍적으로 만들고 뷰컨트롤러 간에 데이터를 전달하는 방법.

-코드로 UI라벨을 만들었지만 아직 라벨의 위치와 크기를 정하는 방법을 모른다. 그래서 frame을 사용해야 한다. 

 label.frame = CGRect( x: int, y: int, width: int, height: int) //cgrect는 여러 가지 유형이 있는데 우리는 위치, 너비와 높이를 정하기 때문에 위와 같은 모양을 선택한다. 

 

-라벨은 view안에 들어간다. 이전까지는 라이브러리에서 라벨을 드래그하여 배경에 집어넣었다. 하지만 지금 라벨을 만들었지만 그 라벨이 들어가는 배경을 만들지 않았기 때문에 view를 만드는 코드를 작성한다.

 ex) view.addSubview( label )

//여기서 라벨은 데이터 유형이 UILabel 이고, addSubview는 UIView로 둘이 유형이 다르지만 UILabel 유형이 UIView 유형에 상속되고 있기 때문에 사용 가능하다. 

-다음은 view의 배경색을 빨간색으로 바꾸어준다. view.backgroundColor = .red

 

-이제 첫 번째 viewcontroller에서 계산 버튼을 누르면 두 번째 viewcontroller로 이동해야 한다. 먼저

-> secondviewcontroller class를 가져온다. ( let seconVC = SecondViewController )

-> 화면 전환을 위해서 present를 사용한다. self.present( 화면 이름, animated: true, completion: nil )

    Present방식은 뒤로 가는 버튼이 생기지 않기 때문에 직접 기능을 만들어줘야 한다. 

    self.present로 띄웠다면 self.dismiss(animated: true) 를 통해 화면을 끌 수 있다.

   

                                                                         출처: https://nsios.tistory.com/19 [NamS의 iOS일기] 

 

-이제 bmi 계산의 결과를 라벨에 넣어야 한다. 첫 번째로 세컨드 뷰 컨트롤러로 돌아가서 변수 bmiValue = "0.0"을 만들고, 라벨의 텍스트를 변수로 바꾸어준다. 다음은 클래스를 이용하여 bmi 계산 결과를 새로 만든 변수 값으로 입력해주면 된다.

'개린이 이야기' 카테고리의 다른 글

2022년 03월 07일의 이야기  (0) 2022.03.07
2022년 03월 05일의 이야기  (0) 2022.03.05
2022년 03월 03일의 이야기  (0) 2022.03.03
2022년 02월 28일의 이야기  (0) 2022.02.28
2022년 02월 18일의 이야기  (0) 2022.02.18