소스변형1
인스턴스 만들고 메서드와 프로퍼티 접근 ,p13
+ 클래스(class or type) 메서드 ,p14
+ 인스턴스 초기화하기 : init() ,p16
+ 인스턴스 만들 때 클래스명 다음 괄호의 의미: init() 호출 ,p17
+ self ,p18
+ computed property의 setter ,p19~22
+ method overloading : 생성자 중첩 ,p23
+ 상속 : 부모가 가진 것을 물려받아요, p39
+ super : 부모 메서드 호출 시 사용 ,p40
+ override : 부모와 자식에 같은 메서드가 있으면 자식 우선 ,p42
class dog{
var age : Int
var name : String
var sex : Bool
var dogAtribute1 : (Int,String,Bool){ //stored property와 computed property ,p19
get{
let myTuple : (Int,String,Bool) = (age, name, sex)
return myTuple
}
set{// computed property의 setter ,p22~23
age = newValue.0
name = newValue.1
sex = newValue.2
}
}
var dogAtribute2 : (Int,String,Bool){ //computed property의 getter ,p20
let myTuple : (Int,String,Bool) = (age, name, sex)
return myTuple
}
func display(){ //메서드와 프로퍼티 접근 ,p13
print("나이=\(age), 이름=\(name)", terminator: ", ")
sex == true ? print("성별=수컷") : print("성별=암컷")
}
class func dogMessage1(){ //클래스(class or type) 메서드 ,p14
print("이클래스는 도그의 속성을", terminator: " ")
}
static func dogMessage2(){ //클래스(class or type) 메서드 ,p14
print("나타네는 클래스입니다")
}
init(age:Int,name:String,sex:Bool){ // 인스턴스 초기화하기 : init() ,p16
self.age = age // self ,p18
self.name = name
self.sex = sex
}
init(age:Int,name:String,sex:String){ // method overloading : 생성자 중첩 ,p23
self.age = age
self.name = name
self.sex = ( sex == "수컷" ? true : false )
}
}
// var dog : dog = dog() // 인스턴스 만들 때 클래스명 다음 괄호의 의미: init() 호출 ,p17
var dog1 : dog = dog(age:3,name:"쫑이",sex:true)
var dog2 : dog = dog(age:4,name:"깜이",sex:"수컷")
dog.dogMessage1() // 출력 : 이클래스는 도그의 속성을
dog.dogMessage2() // 출력 : 나타네는 클래스입니다
dog1.display() // 출력 : 나이=3, 이름=쫑이, 성별=수컷
dog2.display() // 출력 : 나이=4, 이름=깜이, 성별=수컷
print(dog1.dogAtribute1)// 출력 : (3, "쫑이", true)
let myTuple = (8,"유진",false)
dog1.dogAtribute1 = myTuple
print(dog1.dogAtribute2)// 출력 : (8, "유진", false)
class medical : dog {
var medicalDay : Bool
func displayS() {//상속 : 부모가 가진 것을 물려받아요, p39
print("나이=\(age), 이름=\(name)", terminator: ", ")
sex == true ? print("성별=수컷", terminator: ", ") : print("성별=암컷", terminator: ", ")
medicalDay == true ? print("예방접종= 필요") : print("예방접종= 불필요")
}
override class func dogMessage1(){ //override : 부모와 자식에 같은 메서드가 있으면 자식 우선 ,p42
print("(override)이클래스는 도그의 속성을", terminator: " ")
}
init(all:(Int,String,Bool)){ // super : 부모 메서드 호출 시 사용 ,p40
medicalDay = ( all.0 > 2 ) ? true : false
super.init(age:all.0,name:all.1,sex:all.2)
}
}
var medical1 = medical(all:(8, "유진", false))
medical.dogMessage1() // 출력 : (override)이클래스는 도그의 속성을
medical.dogMessage2() // 출력 : 나타네는 클래스입니다
medical1.displayS() // 출력 : 나이=8, 이름=유진, 성별=암컷, 예방접종= 필요
소스변형2
failable initializer가 있는 클래스의 인스턴스 생성 ,p28
+failable initialize가 nil반환 ,29
class Dog{
var age : Int
var name : String
var sex : Bool
func display(){
print("나이=\(age), 이름=\(name)", terminator: ", ")
sex == true ? print("성별=수컷") : print("성별=암컷")
}
init?(all:(Int,String,Bool)){
if all.0 <= 0 {
return nil
}else {
age = all.0
}
name = all.1
sex = all.2
}
}
/*-------------------------------------*///ailable initialize가 있는 클래스의 인스턴스 생성 ,p28
var dog : Dog? = Dog(all:(3,"jinsu",true))
if let dog1 = dog {
dog1.display() //출력: 나이=3, 이름=jinsu, 성별=수컷
}
if let dog2 = Dog(all:(3,"sujan",true)) {
dog2.display() //출력: 나이=3, 이름=sujan, 성별=수컷
}
var dog3 : Dog = Dog(all:(3,"mike",true))!
dog3.display() //출력: 나이=3, 이름=mike, 성별=수컷
var dog4 : Dog? = Dog(all:(3,"tim",true))
dog4!.display() //출력: 나이=3, 이름=tim, 성별=수컷
/*--------------nil 반환----------------*///failable initialize가 nil반환 ,p29
var doge : Dog? = Dog(all:(0,"tim",true))
if let doge1 = doge {
doge1.display()
}
if let doge2 = Dog(all:(0,"tim",true)) {
doge2.display()
}
//인스턴스 생성하면서 바로 강제 언래핑
//crash!!
//강제 언래핑하는 방법은 위험함
//var doge3 : Man = Dog(all:(0,"tim",true))!
//doge3.display()
과제2 : 나이와 몸무게가 음수이면 nil을 반환하는 failable initialize 구현
class Man{
var age : Int
var weight : Double
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init?(age: Int, weight : Double){
if age < 0 || weight < 0 {
return nil
}
else {
self.age = age
self.weight = weight
}
}
}
if let kim1 = kim {
kim1.display() // 출력: 나이=1, 몸무게=3.5
}
if let kim2 = Man(age:2, weight:5.5) {
kim2.display() // 출력: 나이=2, 몸무게=5.5
}
var kim3 : Man = Man(age:3, weight:7.5)!
kim3.display() //출력: 나이=3, 몸무게=7.5
var kim4 : Man? = Man(age:4, weight:10.5)
kim4!.display() // 출력: 나이=4, 몸무게=10.5
/*--------------nil 반환----------------*/
var lee : Man? = Man(age:-1, weight:3.5)
if let lee1 = lee {
lee1.display() // age가 nil값이라 출력안됨
}
if let lee2 = Man(age:0, weight:-5.5) {
lee2.display() // weight가 nil값이라 출력안됨
}
if let lee3 = Man(age:-5, weight:-5.5) {
lee3.display() // age와 weight가 nil값이라 출력안됨
}
//인스턴스 생성하면서 바로 강제 언래핑
//crash!!
//강제 언래핑하는 방법은 위험함
/*var lee4 : Man = Man(age:0, weight:7.5)!
lee4.display()*/
'잡다한지식 > iOS프로그래밍기초' 카테고리의 다른 글
iOS 학습과정(7주차) - 과제,소스 (0) | 2021.10.13 |
---|---|
iOS 학습과정(7주차) - Swift 문법 (0) | 2021.10.13 |
iOS 학습과정(6주차) - Swift 문법 (0) | 2021.10.05 |
iOS 학습과정(5주차) - Swift 문법 (0) | 2021.09.29 |
iOS 학습과정(4주차) - Swift 문법 (0) | 2021.09.23 |