Swift의 학급 개념
Swift의 학급 개념
이번에는 대상을 향한 반 개념이다.(특히 Swift 중심의 설명)
제 생각에도 착오가 있는 것 같습니다. 참고해 주십시오.그리고 잘못이 있으면 조용히 알려주세요.
1.반이란 무엇인가?
간단하게 말하면 반은 바로'설계도'다.클래스에는 방법이나 변수라고 불리는 원소가 포함되어 있다.클래스를 사용하면 공통된 형식으로 대상의 데이터를 관리할 수 있기 때문에 데이터의 관리가 간단해진다.
스위프트에서 학급 선언은 다음과 같다.class MonsterController {
var name: String?
var level: Int?
var hp: Int?
}
클래스 이름은 일반적으로 첫 번째 자모의 대문자인'상카멜'형식으로 묘사된다.
2.실례화
클래스는 객체 컨텐트를 정의하는 설계도입니다.실제 사용 클래스는 실례화(실체화)가 필요하다.설계도에서 실제 제품을 제작한 인상입니다.인스턴스를 만들려면 클래스 이름에 ()을 추가하고 함수로 선언합니다.var monster = MonsterController()
실례를 생성한 후 구성원 변수(실례 변수) 또는 방법(클래스 함수를 방법이라고 부른다)대화 상자.
이 실례들의 속성은 실례명 뒤에 있다.(점) 액세스.monster.name = "Bear"
monster.hp = 1000
다른 인스턴스를 생성할 수도 있습니다.var slime = MonsterController()
slime.name = "King"
monster.hp = 800
3. 이니셜
실례를 만들 때 실행해야 할 방법을 정의하고 변수를 초기화할 수 있습니다.이 방법은 초기화 또는 구조기라고 불린다.
초기화기는 init라는 방법입니다.하지만 방법명 앞에는func를 쓸 필요가 없다.class Monster {
let name: String
var level: Int
var hp: Int
// イニシャライザ
init() {
self.name = "不明"
self.level = 1
self.hp = 500
}
}
self는 자신(실례)을 가리키며 이 실례의 속성을 가리키는 데 사용되지만, 위의 경우name는 구성원 변수로 명확하기 때문에 상관없다.
비임의 유형 변수(한 종류)는 성명할 때 값을 설정하거나 초기화기에서 초기값을 제시해야 한다. 예를 들어 위와 같다.초기 값을 제공하지 않으면 컴파일 오류가 발생합니다.
초기화기에 대해 다음과 같은 매개 변수(외부에서 제공하는 데이터)를 제공할 수 있습니다.매개변수는 인스턴스를 생성할 때 전달됩니다.또한 특별히 지정하지 않으면 로컬 매개 변수 이름이 외부 이름입니다.class Monster {
let name: String
var level: Int
init(name: String, level: Int = 1) {
self.name = name
self.level = level
}
}
let slime = Monster(name: "スライムB", level: 5) //スライム level 5
위의 경우 구성원 변수의 명칭은 초기화기 파라미터의 명칭과 같기 때문에self를 사용하여 구성원 변수와 파라미터를 구분해야 한다.(self를 넣지 않으면 매개 변수로 우선적으로 식별됩니다.)
4. 과부하
과부하란 방법의 명칭은 같지만 매개 변수의 수량이 다른 방법을 가리킨다.(뒤에 기술한'대등'이름과 비슷하니 틀리지 마세요)class Monster {
let name: String
var level: Int
// 引数が1つ
init(name: String) {
self.name = name
self.level = 5
}
// 引数が2つ
init(name: String, level: Int = 1) {
self.name = name
self.level = level
}
}
//引数が1つのイニシャライザが呼ばれる
let slimeA = Monster(name: "スライムA") //スライムA level 5
//引数が2つのイニシャライザが呼ばれる
let slimeB = Monster(name: "スライムB", level: 3) //スライムB level 3
인스턴스화할 때 주어진 매개변수 수를 변경하여 몬스터 클래스의 초기화기는 다릅니다.이렇게 매개 변수의 수량만 바꾸는 것을 '과부하' 라고 한다.
5. 상속
반에서 물려받을 생각이 있다.상속자의 학급은 슈퍼클래스, 상속된 클래스는 자클래스라고 부른다.상속 후, 하위 클래스는 슈퍼 클래스에서 성명한 모든 대상과 방법을 사용할 수 있다.
그림 1 클래스(상속)의 설명도
스위프트는 다음과 같이 선언했다.
"하위 클래스 이름: (콜론) 슈퍼 클래스 이름"// Monsterクラス
class Monster {
var name: String
var level: Int
init(name: String, level: Int) {
self.name = name
self.level = level
}
func attackMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)を攻撃した。");
}
}
/* Slimeクラス(Monsterクラスを継承) */
class Slime: Monster {
func escapeFromMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)から逃げた。");
}
}
let monster = Monster(name: "モンスター", level:3)
let slime = Slime(name: "スライム", level:2)
monster.atackMonster(slime) // モンスターはスライムを攻撃した。
slime.atackMonster(monster) // スライムはモンスターを攻撃した。
slime.escapeFromMonster(monster) // スライムはモンスターから逃げた。
위의 예는 몬스터 클래스를 계승하는 슬림 클래스를 정의했다.슬림 클래스는 실례화하면 머리글자로 불리지만, 슬림 클래스는 init를 선언하지 않아 슈퍼 클래스 몬스터 클래스의 init로 불린다.
슈퍼 클래스attackMonster 방법은 몬스터 클래스와 슬림 클래스의 모든 대상에서 접근할 수 있습니다.
6. 다시 쓰기
다시 쓰는 것은 슈퍼 클래스와 하위 클래스에서 같은 이름의 함수를 정의하는 것입니다.// Monsterクラス
class Monster {
var name: String
var level: Int
init(name: String, level: Int) {
self.name = name
self.level = level
}
func attackMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)を攻撃した。");
}
}
/* Slimeクラス(Monsterクラスを継承) */
class Slime: Monster {
override func attackMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)をおちょくった。");
}
}
let monster = Monster(name: "モンスター", level:3)
let slime = Slime(name: "スライム", level:2)
monster.atackMonster(slime) // モンスターはスライムを攻撃した。
slime.atackMonster(monster) // スライムはモンスターをおちょくった。
slime.super.atackMonster(monster) // スライムはモンスターを攻撃した。
하위 클래스에서 슈퍼 클래스에 정의된 atackMonster 방법을 다시 설명하려면 하위 클래스에서 오버라이드를 다시 설명하는 방법의 첫머리에 기술해야 합니다.
슬림 클래스의 대상에서 슈퍼 클래스의 atackMonster 방법을 호출하려면 슈퍼 클래스를 기술하는 방법을 사용할 수 있다.
이상
June 13, 2016
Reference
이 문제에 관하여(Swift의 학급 개념), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Kenta-Okuda/items/733ecafbf67dfd5ad9ea
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class MonsterController {
var name: String?
var level: Int?
var hp: Int?
}
var monster = MonsterController()
monster.name = "Bear"
monster.hp = 1000
var slime = MonsterController()
slime.name = "King"
monster.hp = 800
class Monster {
let name: String
var level: Int
var hp: Int
// イニシャライザ
init() {
self.name = "不明"
self.level = 1
self.hp = 500
}
}
class Monster {
let name: String
var level: Int
init(name: String, level: Int = 1) {
self.name = name
self.level = level
}
}
let slime = Monster(name: "スライムB", level: 5) //スライム level 5
class Monster {
let name: String
var level: Int
// 引数が1つ
init(name: String) {
self.name = name
self.level = 5
}
// 引数が2つ
init(name: String, level: Int = 1) {
self.name = name
self.level = level
}
}
//引数が1つのイニシャライザが呼ばれる
let slimeA = Monster(name: "スライムA") //スライムA level 5
//引数が2つのイニシャライザが呼ばれる
let slimeB = Monster(name: "スライムB", level: 3) //スライムB level 3
// Monsterクラス
class Monster {
var name: String
var level: Int
init(name: String, level: Int) {
self.name = name
self.level = level
}
func attackMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)を攻撃した。");
}
}
/* Slimeクラス(Monsterクラスを継承) */
class Slime: Monster {
func escapeFromMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)から逃げた。");
}
}
let monster = Monster(name: "モンスター", level:3)
let slime = Slime(name: "スライム", level:2)
monster.atackMonster(slime) // モンスターはスライムを攻撃した。
slime.atackMonster(monster) // スライムはモンスターを攻撃した。
slime.escapeFromMonster(monster) // スライムはモンスターから逃げた。
// Monsterクラス
class Monster {
var name: String
var level: Int
init(name: String, level: Int) {
self.name = name
self.level = level
}
func attackMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)を攻撃した。");
}
}
/* Slimeクラス(Monsterクラスを継承) */
class Slime: Monster {
override func attackMonster(enemy: Monster) {
print("\(self.name)は\(enemy.name)をおちょくった。");
}
}
let monster = Monster(name: "モンスター", level:3)
let slime = Slime(name: "スライム", level:2)
monster.atackMonster(slime) // モンスターはスライムを攻撃した。
slime.atackMonster(monster) // スライムはモンスターをおちょくった。
slime.super.atackMonster(monster) // スライムはモンスターを攻撃した。
Reference
이 문제에 관하여(Swift의 학급 개념), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kenta-Okuda/items/733ecafbf67dfd5ad9ea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)