본문 바로가기

대학교 - 강의/iOS프로그래밍기초

iOS프로그래밍기초 7주차 레포트

금주 강의는 class를 좀 더 심화적으로 배우고, protocol, enum등을 실습코드들을 통해 배워보았다.

실습코드를 조금씩 변형하여 실습하였다. 코드는 다음과 같다.

 

override

class Animal{

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 Cat : Animal {

var name : String ="김고양이"

override func display() { //override를 제거하면 작동하지 않는다.

print("이름=\(name), 나이=\(age), 몸무게=\(weight)")

}

init(age: Int, weight : Double, name : String){

super.init(age:age, weight:weight)

self.name = name

}

}

var kim : Animal = Animal(age:10, weight:20.5)

kim.display() //나이=10, 몸무게=20.5

var lee : Cat = Cat(age:20,weight:65.2,name: "리고양이")

lee.display() //이름=리고양이, 나이=20, 몸무게=65.2

 

과제 : 클래스 하나 찾아서 간단 도움말 만들기

UI 라벨

하나 이상의 정보 텍스트 줄이 표시되는 뷰입니다.

레이블 텍스트의 전체 모양을 구성하고 특성이 있는 문자열을 사용하여 텍스트 내의 하위 문자열 모양을 사용자 지정할 수 있습니다. 인터페이스에 프로그래밍 방식으로 또는 인터페이스 빌더의 특성 검사기와 함께 레이블을 추가하고 사용자 지정합니다.

 

예제

let frame = CGRect(x: 0, y: 0, width: 200, height: 21)

let label = UILabel(frame: frame)

view.addSubview(label)

//레이블 프레임으로 초기화?

let stringVar ="basic String var"

label.text = stringVar

//문자열 변수로 지정해 레이블에 넣기.

label.textColor = UIColor.red

label.textColor = UIColor(red: 64.0 /255.0, green: 88.0 /255.0, blue: 41.0 /225.0, alpha: 1)

//레이블 색상 지정

 

주요 함수

func  text Rect (for Bounds : CGRect, limited To Number Of Lines : Int) -> CGRect

레이블의 텍스트에 대한 도면 사각형을 반환합니다.

func  draw Text (in : CGRect)

지정된 사각형에 레이블의 텍스트 또는 그림자를 그립니다.

 

extension

extension Double {

var squared : Double { //계산 프로퍼티

return self *self

}

}

let myValue: Double =3.0

print(myValue.squared) //9.0

print(2.0.squared) //4.0

extension Int {

var Plus : Int {

return self +self

}

}

let myIntValue : Int =4

print(myIntValue.Plus) //8

print(5.Plus) //10

 

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(){print("달린다~")} //준수, conform

}

class Cat : Runnable {

var x : Int =3

func run() {print("고양이 달려~")}

}

let nabi = Cat()

nabi.run() //고양이 달려~

let minchul = Man()

minchul.run() //달린다~

과제

protocol B {

func bb(value : Int) ->Int

}

class C {

 

}

class A : C,B{

func bb(value : Int) ->Int {

return value *2

}

}

let a = A()

print(a.bb(value:3))

 

중간고사 대비 과제

protocol B {

func bb(value : Int) ->Int

}

class C {

func Alpha(x: Int){

print(x +1)

}

func Alpha(x: Int, y: Int){

print(x +y)

} //overloading

}

class A : C,B{

func bb(value : Int) ->Int {

return value *2

}

override func Alpha(x: Int, y: Int){

print(x *y)

} //overriding

}

let a = A()

print(a.bb(value:3)) //6

a.Alpha(x:4) //5

a.Alpha(x:4, y:6) //24

 

 

 

 

 

열거형 정의

enum Planet {

case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune

} //하나의 case문에 멤버들 나열하는 것도 가능

enum Compass {

case North

case South

case East

case West

}

print(Compass.North) //열거형명.멤버 //North

var direction = Compass.West

direction = .East //두번째 부터는 열거형명 생략 가능

print(direction, type(of:direction)) //East Compass

 

열거형 멤버별 기능 정의

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("")

}