안선생의 개발 블로그
Swift문법 3 본문
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 |