안선생의 개발 블로그

Swift문법 3 본문

Swift

Swift문법 3

안선생 2021. 10. 17. 22:23

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

var name : String = "동물"

override func display() {

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

}

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

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

self.name = name

}

}

var dragon : Student = Student(age:200,weight:650.2,name:"용")

dragon.display() // 이름=용, 나이=200, 몸무게=650.2

 

UIButton 이용한 간단한 예제

import UIKit

class UIRoundPrimaryButton: UIButton{

required init(coder aDecoder: NSCoder){

super.init(coder: aDecoder)!

self.layer.cornerRadius = 5.0;

self.backgroundColor = UIColor(red: 255/255, green: 132/255, blue: 102/255, alpha: 1)

self.tintColor = UIColor.whiteColor() } }

//

self.layer.cornerRadius: 모서리 둥글기를 결정합니다. 값이 커질 수록 모서리가 둥글둥글해집니다.

self.backgroundColor: 버튼의 배경색을 결정합니다.

self.tintColor: 버튼의 TextColor를 결정한다고 생각하시면 됩니다.

self.layer.borderColor: 버튼의 외곽선 컬러를 결정합니다.

self.layer.borderWidth: 버튼의 외곽선 두께를 결정합니다. 값이 커질 수록 외곽선이 두꺼워집니다.

출처: https://yucaroll.tistory.com/4 [코딩하는 빵]

 

extension(익스텐션)

표준 자료형 Double 구조체에 두 배의 값을 반환하는 프로퍼티를 추가

extension Double {

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

return self + self

 }

}

이제는 Double형의 인스턴스 myValue를 다음과 같이 사용할 수 있음

let myValue: Double = 3.0

print(myValue.squared) // 6.0

print(2.0.squared) // 4.0 Double형 값에도 .으로 바로 사용 가능

 

swift의 access control

public class MyClass{

// 모듈의 모든 소스 파일 내에서 접근+정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 접근 가능

fileprivate var name : String = "Kim"

//현재 소스 파일 내에서만 사용 가능

private func play() {}

//현재 블럭 내에서만 사용 가능

func display(){} // internal 생략됨

//해당 모듈의 모든 소스 파일 내에서 사용

}

 

프로토콜(protocol)

특정 클래스와 관련없는 함수(메서드)들의 선언 집합

 

protocol과 프로퍼티/메서드 선언

protocol SomeProtocol {

 var x: Int { get set } //읽기와 쓰기가 가능

 var y: Int { get } //읽기 전용

 static var tx: Int { get set }

 static func typeMethod()

 func random() -> Double

}

 

protocol 정의, 채택, 준수

protocol Sleepnable { //대리하고 싶은 함수 목록 작성

 var x : Int {get set} //읽기와 쓰기 가능 프로퍼티,{get}은 읽기 전용

//property in protocol must have explicit { get } or { get set } specifier

 func sleep() //메서드는 선언만 있음

}

class Man : Sleepnable { //채택, adopt

 var x : Int = 1 //준수, conform

 func sleep(){print("잠잔다~")} //준수, conform

}

let ahn = Man()

print(ahn.x) // 1

ahn.sleep() // 잠잔다~

 

 

 다음과 같은 기능을 전체 하나의 소스로 작성하시오.

 bb()라는 메소드가 하나있는 프로토콜(protocol) B을 만드시오.

bb()메서드는 Int형 값을 매개변수로 받아 Int형으로 리턴하는 메서드이다.

 클래스 A는 클래스 C라는 부모를 갖는다(C로부터 상속받는다).

 클래스 A에서 프로토콜 B를 채택하고, 준수하는 소스를 작성하시오.

 bb()메서드는 Int형 값을 매개변수로 받아 두 배한 값을 Int형으로 리턴하는 메서드이다.

 클래스 A의 인스턴스 a를 만들고 bb를 호출(argument로 3을 입력)하여 결과를 확인하세요.

protocol B{

func bb(x:Int) -> Int

}

class C{

}

class A : C, B{

func bb(x:Int) -> Int{

return x*2

}

}

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

 

상속, overloading, overriding, protocol이 모두 들어간 예제

protocol B{

func bb(x:Int) -> Int

}

class C{

func bb(x:Int) -> Int{

return x*3

}

 

func bb(x:Double) -> Double{

return x*5.0

}

}

class A : C, B{

override func bb(x:Int) -> Int{

return x*2

}

}

var b1 = C()

print(b1.bb(x:2)) //6

var b = C()

print(b.bb(x:2.0)) //10.0

var a : A = A()

print(a.bb(x:2)) //4

 

열거형(enum)

관련있는 데이터들이 멤버로 구성되어 있는 자료형 객체

 원치 않는 값이 잘못 입력되는 것 방지

 입력 받을 값이 한정되어 있을 때

 특정 값 중 하나만 선택하게 할 때

 

열거형 정의

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 = .West

switch direction {

case .North:

 print("북")

case .South:

 print("남")

case .East:

 print("동")

case .West:

 print("서")

}

//서

 

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

'Swift' 카테고리의 다른 글

간단한 iOS앱개발(2)  (0) 2021.11.16
간단한 iOS 앱 개발하기  (0) 2021.11.05
윈도우 맥 차이점  (0) 2021.11.01
Swift 문법(2  (0) 2021.10.11
Swift문법  (0) 2021.10.03