관문: 오늘부터 iOS 어플리케이션(Swift) 제1장 4~5절 순수 중국어 개발
1.4 Functions and Methods: 함수 및 방법
1.4.1 함수(function)
함수: 이름이 있는 코드 세그먼트를 가리킨다.그것은 프로그램 중의 많은 곳에 사용될 수 있다.
func를 사용하여 함수 (function) 를 설명합니다.함수는 0 ~ 여러 개의 매개 변수를 포함하여'이름: 유형'형식으로 쓸 수 있습니다.함수 매개 변수의 역할은 함수가 호출될 때 함수에 더 많은 정보를 전달할 수 있는 것이다.함수에도 반환 값이 있을 수 있습니다. "->"뒤에 쓰십시오.반환값의 역할은 함수 호출이 끝날 때 반환함수 호출의 결과입니다.함수의 구현은 대괄호 안에 쓰인다.
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
함수 이름 뒤에 매개 변수 목록의 형식을 따라 함수를 호출합니다. 첫 번째 매개 변수만 매개 변수 이름을 쓰지 않습니다.
greet("Anna", day: "Tuesday") greet("Bob", day: "Friday") greet("Charlie", day: "a nice day")
1.4.2 메서드(method)
특정 클래스에 정의된 함수를 방법 (method) 이라고 합니다.방법은 이 특정 클래스에 현시적으로 귀속되고, 이 클래스에서만 호출될 수 있으며, (또는 이 유형의 하위 클래스)이전 예에서는 다음과 같이 HasSuffix() 유형의 String 방법이 있습니다.
let exampleString = "hello"
if exampleString.hasSuffix("lo") {
print("ends in lo")
}
보시다시피 조작부호 "를 사용하십시오."이 유형의 방법을 호출합니다.
호출할 때 첫 번째 매개 변수는 매개 변수 이름을 생략하고 나머지 매개 변수는 이름을 써야 합니다.예를 들어 다음 코드에서 이 방법은 두 개의 매개 변수가 있는데 두 번째 매개 변수의 이름인'atIndex:'(코드 가독성이 크게 향상됨)만 쓰십시오.
var array = ["apple", "banana", "dragonfruit"]
array.insert("cherry", atIndex: 2)
array
1.5 Classes and Initializers: 클래스 및 구조물
대상을 대상으로 프로그래밍하는 과정에서 프로그램 활동은 대부분 프로그램 내부 대상 간의 상호작용에 의존한다.
대상(object): 클래스의 실례화된 산물입니다.
클래스(class): 이 대상의 청사진으로 이해할 수 있습니다.
클래스에서 속성 (property) 을 사용하여 자신의 추가 정보를 저장하고, 방법 (method) 으로 행동을 정의합니다.
1.5.1 클래스의 정의
클래스 뒤에 있는 클래스 이름을 사용하여 클래스를 정의합니다.한편, 클래스 속성의 성명 문법은 상량 변수의 성명 문법과 유사하지만 다른 점은 클래스에서 성명한 것일 뿐이다.클래스에서 방법의 성명은 함수 성명과 유사합니다.
다음 코드에는 number OfSides 속성과 simpleDescription () 방법이 있는 Shape 클래스가 설명되어 있습니다.
class Shape
{
var numberOfSides = 0
func simpleDescription() -> String
{
return "A shape with \(numberOfSides) sides."
}
}
1.5.2 대상의 정의 및 접근
클래스의 실례를 만듭니다. 즉, 대상을 만듭니다.
생성 방법은 클래스 이름 뒤에 괄호 "()"를 붙이고 점 조작부호를 사용하여 생성된 실례의 속성과 방법에 접근합니다.여기서 shape는 Shape 클래스의 실례화된 객체입니다.
var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()
1.5.3 구조기(initializer)
Shape 클래스에는 구조기(initializer)라는 중요한 내용이 없습니다.
구조기는 실제적으로 클래스의 방법으로 클래스의 실례 대상을 초기화하는 데 사용할 수 있다.모든 속성을 초기화하고 다른 초기화 작업을 완성하는 것을 포함한다.
init를 사용하여 구조기를 만들 수 있습니다.
다음 예에서는 구조기를 포함하는 NamedShape 클래스를 정의하고 구조기가name 매개 변수를 수신합니다.
class NamedShape
{
var numberOfSides = 0
var name: String
init(name: String)
{
self.name = name
}
func simpleDescription() -> String
{
return "A shape with \(numberOfSides) sides."
}
}
self 키워드를 사용하여 분류된 속성 이름name과 구조기 매개 변수 이름name을 구분합니다.
모든 속성은 값을 부여해야 합니다. (설명할 때 값을 부여하거나 구조기에서 값을 부여해야 합니다.)
클래스 이름 뒤에 괄호를 붙여서 구조기를 호출합니다. init를 사용해서 호출할 필요가 없습니다.구조기를 호출할 때 다음과 같이 모든 매개변수 이름을 작성해야 합니다.
let namedShape = NamedShape(name: "my named shape")
1.5.4 클래스의 계승 (inherit) 과 방법 덮어쓰기 (override)
계승(inherit)을 통해 한 종류는 다른 종류 행위를 가질 수 있다.계승된 클래스는 부류(superclass)라고 하고, 부류 행위를 계승한 클래스는 자류(subclass)라고 한다.상속된 구문 형식은 하위 클래스 이름: 상위 클래스 이름입니다.한 자류는 한 부류만 계승할 수 있는데 이런 식으로 미루어 하나의 나무 모양의 계승 차원 관계를 구성한다.
하위 클래스의 방법이 부모 클래스의 동명 방법을 덮어쓸 때, 덮어쓸 때 덮어쓰지 않으면 컴파일러가 오류를 보고합니다.또한 컴파일러는 오버라이드를 썼지만 실제로는 부모 방법을 덮어쓰는 하위 방법이 없습니다.
다음 코드에서는 NamedShape의 하위 클래스인 Square 클래스를 정의합니다.
class Square: NamedShape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length \(sideLength)."
}
}
let testSquare = Square(sideLength: 5.2, name: "my test square")
testSquare.area()
testSquare.simpleDescription()
1.5.5 구조기의 작법
Square 클래스의 구조기는 다음 세 가지 단계를 거쳤습니다.
이렇게 하면 더욱 많은 초기화 작업을 완성할 수 있다.
실제로 초기화 작업이 항상 성공하지 않을 때가 있습니다. 범위를 초과한 초기화 파라미터를 제공하면 잘못된 대상을 초기화할 수 있기 때문입니다.
대상을 초기화하는 데 실패할 수 있는 구조기를 실효 구조기 (failable initializer) 라고 부른다.실효 구조기가 nil로 돌아갈 수 있습니다.init 사용?실효 구조기 설명:
class Circle: NamedShape {
var radius: Double
init?(radius: Double, name: String) {
self.radius = radius
super.init(name: name)
numberOfSides = 1
if radius <= 0 {
return nil
}
}
override func simpleDescription() -> String {
return "A circle with a radius of \(radius)."
}
}
let successfulCircle = Circle(radius: 4.2, name: "successful circle")
let failedCircle = Circle(radius: -7, name: "failed circle")
구조기는 관련 확장이 있을 수 있다.지정한 구조기 (designated initializer) 는 클래스의 주요 구조기임을 표시합니다.모든 종류의 구조기는 최종적으로 지정된 구조기를 호출해야 한다.단축 구조기는 부차적인 구조기로, 주로 추가 행위를 추가하거나 사용자 정의 작업을 하는 데 사용되지만, 지정한 구조기를 최종적으로 호출해야 한다.이 주요 구조기와 부차적인 구조기는 각각designate와convenience 키워드를 사용하여 정의합니다.
만약 구조기 뒤에 Required 키워드를 따라잡았다면, 모든 이 종류의 하위 클래스는 반드시 이 구조기를 다시 써야 한다는 것을 나타낸다.
1.5.6 객체 유형 변환
유형 변환은 대상 유형을 검출하는 방법으로 이 대상을 계승 차원의 다른 부류나 하위 대상으로 간주하여 다루게 한다.
유형의 상수나 변수는 실제로 이 클래스의 하위 클래스 실례일 수 있습니다 (부위 클래스 포인터는 하위 클래스 대상을 참조합니다).만약 이러한 상황에 부딪히면, 형식 변환 조작부호를 사용하여 하위 형식으로 변환할 수 있습니다.
다음 유형으로 전환하는 데 실패할 수 있기 때문에 유형 변환 조작부호는 두 가지 다른 형식이 있습니다.첫 번째는 선택 가능한 형식, 즉 "as?"입니다.이것은 당신이 변환하려고 하는 목표 형식에 대응하는 선택할 수 있는 형식 값을 되돌려줍니다.두 번째는 강제 전환 형식, 즉'as!'이다.변환을 시도하고 패키지를 강제로 해제합니다.
만약 형식 변환이 실패할 수 있다고 생각한다면, 선택할 수 있는 형식 변환 조작부호 "as?"를 사용하십시오.이런 형식의 형식 변환은 선택할 수 있는 형식 결과를 되돌려줍니다. 변환이 실패하면nil을 되돌려줍니다.너는 결과를 되돌려서 전환이 성공했는지 확인할 수 있다.
만약 형식 변환이 반드시 성공한다고 확신한다면, 강제 형식 변환 조작부호 "as!"를 사용할 수 있습니다.그러나 변환이 성공하지 못하면 이 형식의 아래 형식 변환은 실행 중 오류를 초래할 수 있습니다.
다음 예에서 선택할 수 있는 형식 변환 조작부호를 사용하여shape 그룹의 모든shape 대상이circle인지 square인지 확인합니다.해당 형태가 발견되면 카운터에 1을 추가하여 계산 결과를 인쇄합니다.
class Triangle: NamedShape {
init(sideLength: Double, name: String) {
super.init(name: name)
numberOfSides = 3
}
}
let shapesArray = [Triangle(sideLength: 1.5, name: "triangle1"), Triangle(sideLength: 4.2, name: "triangle2"), Square(sideLength: 3.2, name: "square1"), Square(sideLength: 2.7, name: "square2")]
var squares = 0
var triangles = 0
for shape in shapesArray {
if let square = shape as? Square {
squares++
} else if let triangle = shape as? Triangle {
triangles++
}
}
print("\(squares) squares and \(triangles) triangles.")
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.