iOS 프로그래밍 한성현교수님 7주차 수업정리

유재우·2021년 10월 13일
0

override : 부모와 자식에 같은 메서드가 있으면 자식 우선

class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=(age), 몸무게=(weight)")

}
init(age: Int, weight : Double){ 
    self.age = age
    self.weight = weight
} 

}
class Student : Man {
var name : String = "YOO"
override func display() {
print("이름=(name), 나이=(age), 몸무게=(weight)")
}
init(age: Int, weight : Double, name : String){
super.init(age:age, weight:weight) // 부모 init 함수 호출
self.name = name
}
}
var yoo : Man = Man(age:21, weight:82.9) //부모 클래스 호출
yoo.display()
var kim : Student = Student(age:32,weight:74.2,name:"kim chulsu") // 자식 클래스 호출
kim.display()
// 나이=21, 몸무게=82.9
// 이름=kim chulsu, 나이=32, 몸무게=74.2
과제 : 클래스 하나 찾아서 간단 도움말 만들기
Class : UISwitch
UISwitch 클래스는 속성 및 해당 켜기/끄기 상태를 컨트롤하는 메서드를 선언한다.
UISlider와 마찬가지로 사용자가 스위치 컨트롤을 조작하면 값을 변경하는 이벤트가 트리거된다.
스위치를 켜거나 끌 때 스위치를 색조하는 데 사용되는 색상을 변경하여 스위치 모양을 사용자 지정할 수 있다.

init?(coder: NSCoder)
unarchiver의 데이터에서 스위치 컨트롤을 생성한다.
var isOn: Bool
스위치의 끄기/켜기 상태를 결정하는 bool값이다.
var onTintColor: UIColor?
스위치의 색깔을 UIColor값으로 결정한다.
lazy var controlSwitch: UISwitch = { //UISwitch 클래스를 상속받은 controlSwitch 함수 생성
let swicth: UISwitch = UISwitch() //switch 생성자 생성
swicth.layer.position = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height - 200)
//switch 생성자에 레이어 위치 및 크기 설정
swicth.tintColor = UIColor.orange // switch 생성자의 색깔 지정
swicth.isOn = true // switch 생성자의 상태를 켜기로 지정
return swicth
}
출처: https://calmone.tistory.com/entry/iOS-UIKit-in-Swift-4-UISwitch-사용하기 [투데잇 (Today IT)]
Class : UIButton
사용자 상호 작용에 대한 응답으로 사용자 지정 코드를 실행하는 컨트롤이다.

init(frame: CGRect)
지정된 프레임으로 새 버튼을 만든다

var tintColor: UIColor!
Button의 색깔을 UIColor값으로 결정한다.
class DefaultBtn: UIButton { // DefaultBtn에 UIButton을 상속
let button: UIButton = UIButton() //button 생성자 생성
override init(frame: CGRect) {
super.init(frame: frame) // 상속 받은 init함수를 사용
}
button.tintcolor = UIColor.red // button 생성자의 색깔 지정
}
출처: https://jiseobkim.github.io/swift/2018/07/15/swift-UIButton-과-Class.html

extension
extension Double {
var squared : Double { //계산 프로퍼티
return self * self
}
}
let myVal: Double = 4.0
print(myVal.squared)
print(2.4.squared) //Double형 값에도 .으로 바로 사용 가능
// 16.0
// 5.76

swift의 access control
public class MyClass{
// 모듈의 모든 소스 파일 내에서 접근+정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 접근 가능
fileprivate var name : String = "Yoo" //현재 소스 파일 내에서만 사용 가능
private func play() {

} //현재 블럭 내에서만 사용 가능
func display(){

} // internal 생략됨 
//해당 모듈의 모든 소스 파일 내에서 사용

}

protocol 정의
protocol 프로토콜명{
프로퍼티명
메서드 선언 //메서드는 선언만 있음
}
protocol 프로토콜명 : 부모1프로토콜, 부모2프로토콜{
// 프로토콜은 다중 상속도 가능
}

protocol과 프로퍼티/메서드 선언
protocol SomeProtocol {
var x: Int { get set } //읽기와 쓰기가 가능
vary:Int{get} //읽기 전용
static var tx: Int { get set }
static func typeMethod()
func random() -> Double
}

protocol 정의, 채택, 준수
protocol Runnable { //대리하고 싶은 함수 목록 작성
var x : Int {get set} //읽기와 쓰기 가능 프로퍼티,{get}은 읽기 전용
//property in protocol must have explicit { get } or { get set } specifier
func run()
}
class Man : Runnable { //채택, adopt
var x: Int = 1 //준수, conform
func run() { //준수, conform
print("달린다~")
}
//메서드는 선언만 있음
}
var yoo : Man = Man()
yoo.run()
// 달린다~

과제
다음과 같은 기능을 전체 하나의 소스로 작성하시오.
bb()라는 메소드가 하나있는 프로토콜(protocol) B을 만드시오.
bb()메서드는 Int형 값을 매개변수로 받아 Int형으로 리턴하는 메서드이다.
클래스 A는 클래스 C라는 부모를 갖는다(C로부터 상속받는다).
클래스 A에서 프로토콜 B를 채택하고, 준수하는 소스를 작성하시오.
bb()메서드는 Int형 값을 매개변수로 받아 두 배한 값을 Int형으로 리턴하는 메서드이다.
클래스 A의 인스턴스 a를 만들고 bb를 호출(argument로 3을 입력)하여 결과를 확인하세요.

스스로 해본 코드
class C{
func bb(x num : Int) -> Int {
let result = num * 2
return result
}
}
protocol B {
func bb(x num : Int) -> Int
}
class A : C,B{
}
var a : A = A()
print(a.bb(x: 3))
// 6

교수님 답
protocol B {
func bb(x:Int) ->Int
}
class C {
}
class A : C, B {
func bb(x:Int) -> Int {
return x * 2
}
}
var a = A()
print(a.bb(x:3))
// 6

중간 고사 대비 과제
class C{
var age : Int = 20
func bb(x num : Int) -> Int {
let result = num 2
return result
}
init(age : Int) {
self.age=age
}
}
protocol B {
func bb(x num : Int) -> Int
}
class A : C,B{
var name : String = "YOO"
override func bb(x num : Int) -> Int { //overriding
let result = num
2
return result
}
func display() {
print("AGE = (age), NAME = (name)")
}
init(age: Int, name : String){ //overloading
super.init(age:age)
self.name = name
}
}
var Yoo : A = A(age:24, name: "YooJaeWoo")
Yoo.display()
print(Yoo.bb(x:4))

열거형 정의
enum Planet {
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune }
enum Compass {
case North
case South
case East
case West

}
print(Compass.North) //열거형명.멤버
var direction = Compass.West
direction = .East //두번째 부터는 열거형명 생략 가능
print(direction, type(of:direction))
print(Planet.Mercury)
//North
// East Compass
// Mercury

열거형 멤버별 기능 정의
enum Compass {
case North
case South
case East
case West
}
var direction : Compass
direction = .South
switch direction {
case .North:
print("북")
case .South:
print("남")
case .East:
print("동")
case .West:
print("서")
}
// 남

profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글