처음부터 차근차근
Swift 실습 6 본문
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 |