처음부터 차근차근

Swift 실습 6 본문

프로그래밍/Swift

Swift 실습 6

_soyoung 2021. 10. 15. 19:12
반응형
class Animal {
    var isLive : Bool
    var age : Int
    func printInformation() {
        print("살아있는가 : \(isLive)")
        print("나이 : \(age)")
    }
    init(isLive : Bool, age: Int){ 
        self.isLive = isLive
        self.age = age
    }
}
class Human : Animal {
    var name : String
    var isUseTool : Bool
    // override : 부모 클래스의 함수를 자식 클래스에서 재정의 하는 것
    // 함수가 호출될 때 자식을 우선으로 한다.
    override func printInformation() {
        print("살아있는가 : \(isLive)")
        print("나이 : \(age)")
        print("이름 : \(name)")
        print("도구를 사용하는가 : \(isUseTool)")
    }
    init(isLive : Bool, age: Int, name : String, isUseTool :Bool){
        self.name = name
        self.isUseTool = isUseTool
        super.init(isLive : isLive, age : age)
    }
}
var animal : Animal = Animal(isLive : false, age: 20) 
animal.printInformation()
var woman : Human = Human(isLive : true, age: 21, name : "김나나", isUseTool : true) 
woman.printInformation()
//결과 : 살아있는가 : false
//나이 : 20
//살아있는가 : true
//나이 : 21
//이름 : 김나나
//도구를 사용하는가 : true






// extension : 클래스,enum, struct, protocol의 기능을 추가하기 위해 사용하는 것
// 주로 메서드, 계산 프로퍼티, 생성자를 추가한다.
extension Int {
    // computed property
    var plus : Int { 
        // self는 자기 자신 즉, 인스턴스 자체를 뜻한다
        return self + 10
    }
    // method
    public func printInt() {
        print("\(self) 입니다!")
    }
}
var test : Int = 10
print(test.plus);
print(test.printInt())
//이것도 가능
print(1.plus);
//결과 : 20
//10 입니다!
//()
//11






// access modifier(접근 수정자) : 접근 가능성을 설정하는 키워드
// 접근 수준이 높은 순서대로 코딩함
// open : 외부 모듈에서도 접근 가능
open class ksyClass {
    // public : 외부 모듈에서도 접근 가능(단, 외부 모듈에서는 override 불가능. open은 가능)
    public let num1 = 1
    // internal : 해당 모듈 안에 있는 모든 것이 접근 가능
    internal let num2 = 2
    // Swift는 접근 수정자를 작성하지 않으면 internal이 default로 들어감. 
    // 즉, sum() 메서드의 접근 수정자는 internal 
    func sum() {
        print(num1 + num2)
    }
    // fileprivate : 해당 소스파일 내부에서만 접근 가능
    fileprivate let num3 = 3
    // private : 정의한 블록 내부에서만 접근 가능
    private let num4 = 4
    // default 접근 수정자인 internal
    func sub() {
        print(num4 - num3)
    }
} 
let ksyclass = ksyClass()
ksyclass.sum()
ksyclass.sub()
//결과 : 3
// 1






// protocol : 선언만된 함수와 프로퍼티들의 집합
protocol Flyable {
    // protocol에서 프로퍼티를 선언할 때는 꼭 {get set or get}을 써줘야하고, var로 선언해야 한다.
    // get set : 읽기 쓰기 가능
    var hour : Int {get set}
    // get : 읽기 전용
    var minite : Int {get}
    func fly()
}
// egle 클래스는 Flyable 프로토콜을 채택했다
class Egle : Flyable {
    // Flyable protocol을 준수한다
    var hour = 4
    var minite = 30
    func fly() {
        print("The eagle flies in the sky for \(hour) hours and \(minite) minutes....")
    }
}
// Flyable 프로토콜을 채택했다
class Parrot : Flyable {
    // Flyable protocol을 준수한다
    var hour = 1
    var minite = 2
    func fly() {
        print("The parrot flies in the sky for \(hour) hours and \(minite) minutes....")
    }
}
let bird1 = Egle()
bird1.fly()
let bird2 = Parrot()
bird2.fly()
// 결과 : The eagle flies in the sky for 4 hours and 30 minutes....
// The parrot flies in the sky for 1 hours and 2 minutes....






protocol B {
    func bb(num: Int) -> Int
}
class C {
    
}
class A : C, B{
    func bb(num: Int) -> Int {
        return num * 2
    }
}
let a = A()
print(a.bb(num: 3))
//결과 : 6






// protocol 정의
protocol Eatable {
    var color : String {get set}
    func explainColor() -> String
}
class Fruit {
    var number : Int
    func printEatSound() {
        print("crunch")
    }
    // 생성자 overloading
    init(number: Int) {
        self.number = number
    }
    init() {
        self.number = 10
    }
}
class Apple : Fruit, Eatable{
    // Eatable 프로토콜 준수
    var color : String
    func explainColor() -> String{
        return "The color of this is " + color
    }
    // overriding
    // 부모 클래스 Fruit의 eatSound를 재정의했다.
    override func printEatSound() {
        print("a-sag a-sag")
    }
    
    init(color: String) {
        self.color = color
        super.init(number: 1)
    }
}
let apple = Apple(color: "red")
print(apple.explainColor())
apple.printEatSound()
print(apple.number)
//결과 : The color of this is red
//a-sag a-sag
//1






// 열거형 : 서로 관련있는 데이터들이 멤버로 구성되어 있는 자료형 객체
enum PlayerState {
    case Wait
    case Walk
    case Run
    case Jump
    case Fall
    case Roll
}
// 이렇게도 열거형을 정의할 수 있음
//enum PlayerState {
//    case Wait, Walk, Run, Jump, Fall, Roll
//} 
// 열거형명.멤버를 하면 열거형 멤버가 나온다
print(PlayerState.Wait) 
// 열거형 멤버 대입
var player = PlayerState.Run
print(type(of:player), ":", player)
// 두 번째 부터는 열거형명을 생략할 수 있다
player = .Jump 
print(type(of:player), ":", player)
//Wait
//PlayerState : Run
//PlayerState : Jump






// 열거형
enum PlayerState {
    case Wait
    case Walk
    case Run
    case Jump
    case Fall
    case Roll
}
var player : PlayerState
player = .Wait
switch player {
case .Wait:
    print("player가 기다리고 있습니다.")
case .Walk:
    print("player가 걷고 있습니다.")
case .Run:
    print("player가 달리고 있습니다.")
case .Jump:
    print("player가 점프하고 있습니다.")
case .Fall:
    print("player가 떨어지고 있습니다.")
case .Roll:
    print("player가 구르고 있습니다.")
}
//결과 : player가 기다리고 있습니다.

 

 

 

 

UIButton 기능

 

버튼을 만드는 기능을 한다.

사용자의 상호작용(터치 등)에 반응해서 미리 지정된 코드를 실행하고, 함수를 사용해서 버튼을 꾸밀 수 있다.

 

 

 

 

UIButton 생성자

 

init(frame: CGRect)

지정된 프레임으로 새 버튼을 만든다.

 

init(frame: CGRect, primaryAction: UIAction?)

지정된 프레임으로 새 버튼을 만들고, 기본 동작 이벤트를 등록한 다음 제목과 이미지를 동작의 제목과 이미지로 설정한다.

 

init?(coder: NSCoder)

unarchiver 데이터로 새 버튼을 만든다.

 

init(type: UIButton.ButtonType)

지정된 유형의 새 버튼을 만든다.

 

init(type: UIButton.ButtonType, primaryAction: UIAction?)

지정된 유형으로 새 버튼을 만들고, 기본 작업 이벤트를 등록한 다음 제목과 이미지를 작업의 제목과 이미지로 설정한다.

 

 

 

 

UIButton 주요함수

 

func setImage(UIImage?, for: UIControl.State)

지정한 상태에 사용할 버튼의 이미지를 적용한다.

 

func setTitle(String?, for: UIControl.State)

지정한 상태에 사용할 버튼의 제목을 적용한다.

 

func setTitleColor(UIColor?, for: UIControl.State)

지정한 상태에 사용할 버튼 제목의 색상을 설정한다.

 

 

 

 

UIButton 예제 

 

button.setImage(UIImage.init(named: "icon"), for: .normal)

 

@IBOutlet weak var btnResize: UIButton!

btnResize.setTitle("확대", for: .normal)

 

@IBOutlet weak var btnResize: UIButton!

btnResize.setTitleColor(UIColor.blue, for: .normal)

 

 

 

 

 

 

출처 : iOS프로그래밍기초(21-2학기)한성현교수 강의 내용 변형 및 요약

반응형

'프로그래밍 > Swift' 카테고리의 다른 글

Mac과 Window의 차이점  (0) 2021.10.31
Swift 문법 정리 6  (0) 2021.10.16
Swift 문법 정리 5  (0) 2021.10.08
Swift 실습 5  (0) 2021.10.07
Swift 문법 정리 4  (0) 2021.09.30
Comments