중화사전망 - 자전 검색 - SWIFT 소개

SWIFT 소개

첫 번째 프로그램은 화면에 "Hello, world" 를 표시해야 합니다. Swift 에서는 코드 한 줄로 이 작업을 수행할 수 있습니다.

Println ("안녕, 세상")

C 또는 Objective-C 코드를 작성한 경우 Swift 에서는 이 코드 행이 하나라는 것을 잘 알고 있어야 합니다.

완전한 프로그램. 입력/출력 또는 문자열 처리를 위해 별도의 라이브러리를 가져올 필요가 없습니다. 전역 범위의 코드는 자동으로 다음과 같이 처리됩니다

프로그램의 진입점을 만들면 주 함수가 필요하지 않습니다. 또한 각 문의 끝에 세미콜론을 쓸 필요가 없습니다.

이 자습서에서는 일련의 프로그래밍 예제를 통해 Swift 에 대한 초보적인 이해를 제공합니다. 모르는 것이 있으면 걱정할 필요가 없습니다.

—이 장에서 설명하는 모든 내용은 다음 장에서 자세히 설명합니다.

참고:

최상의 경험을 위해 Xcode 의 코드 미리 보기 기능을 사용하십시오. 코드 미리 보기 기능을 사용하면 코드를 편집하고 실시간으로 운을 볼 수 있습니다

선 결과. Let 를 사용하여 상수를 선언하고 var 을 사용하여 변수를 선언합니다. 상수 값은 컴파일 시 얻을 필요가 없지만 1 만 지정할 수 있습니다.

시간. 즉, 상수를 사용하여 한 번만 결정하면 되지만 여러 번 사용해야 한다는 값을 나타낼 수 있습니다.

Var myVariable = 42

MyVariable = 50

MyConstant = 42 로 설정합니다

상수나 변수의 유형은 상수나 변수에 지정된 값과 같아야 합니다. 그러나 선언 시 유형은 선택 사항이며 값이 동시에 지정된 경우 컴파일됩니다.

번역기는 자동으로 유형을 추론합니다. 위의 예에서 컴파일러는 myVariable 이 초기이기 때문에 정수라고 추론합니다

이 값은 정수입니다.

초기 값이 충분한 정보를 제공하지 않거나 초기 값이 없는 경우 변수 뒤에 콜론으로 구분된 유형을 선언해야 합니다.

암시적 정수 설정 = 70

ImplicitDouble = 70.0 을 설정합니다

Let explicitDouble: Double = 70

상수를 만들고, 유형을 명시적으로 Float 으로 지정하고, 초기 값을 4 로 지정합니다.

값은 다른 유형으로 암시적으로 변환되지 않습니다. 한 값을 다른 유형으로 변환해야 하는 경우 명시적으로 변환하십시오.

레이블 = "폭"

폭 = 94 로 만들기

WidthLabel = 레이블+문자열 (폭) 을 설정합니다

마지막 행에서 문자열을 삭제합니다. 오류 프롬프트는 무엇입니까?

값을 문자열로 변환하는 더 쉬운 방법은 괄호 안에 값을 쓰고 괄호 앞에 백슬래시를 쓰는 것입니다. 예를 들면 다음과 같습니다.

사과를 3 으로 만들다

귤을 5 로 만들다

애플 summary = "나는 \ (사과) 사과를 가지고 있다."

Let fruitSummary = "나는 과일 \ (사과+오렌지) 조각이 있다."

\ () 를 사용하여 부동 소수점 계산을 문자열로 변환하고 누군가의 이름을 추가하여 인사합니다.

대괄호 [] 를 사용하여 배열 및 사전을 만들고 아래 첨자 또는 키를 사용하여 요소에 액세스합니다.

Var shoppingList = ["메기" "물" "튤립" "파란색 페인트"]

쇼핑 목록 [1] =' 물 한 병'

Var 직업 = [

말콤: 선장님,

켈리: 정비사,

] 을 참조하십시오

직업 ["Jayne"] = "홍보"

빈 배열 또는 사전을 만들려면 초기화 구문을 사용합니다.

Letempty array = [string] ()

Let empty dictionary = dictionary < 문자열, Float & gt ()

유형 정보를 추론할 수 있다면 [] 과 [:] 을 사용하여 변수를 선언하거나 함수를 제공하는 것처럼 빈 배열과 빈 사전을 만들 수 있습니다.

매개 변수를 전달할 때.

Shoppinglist = []//쇼핑. 조건 작업에는 if 와 switch 를 사용하고 루프에는 for-in, for, while 및 do-while 을 사용합니다. 포장 조건 및 순환 변화

수량괄호는 생략할 수 있지만 문장 본문 중의 중괄호는 필요하다.

개인점수 = [75,43,103,87, 12]

Var 팀 점수 = 0

개인 점수 점수 {

점수 & gt50 {

팀 점수 += 3

} 그렇지 않으면 {

팀 스코어+=1

}

}

팀 점수

If 문에서 조건은 부울 표현식이어야 합니다. 즉, if score {...} 와 같이 오류를 숨기는 대신 보고합니다.

모양을 0 과 비교합니다.

If 와 let 을 모두 사용하여 누락된 값을 처리할 수 있습니다. 일부 변수의 값은 선택 사항입니다. 선택적 값은 발생일 수 있습니다.

값이 0 이면 값이 없음을 나타냅니다. 유형 뒤에 물음표를 추가하여 변수 값을 표시할 수 있습니다.

Var optionalString: 문자열? = "안녕하세요"

옵션 문자열 = = 0

Var optionalName: 문자열? = "존 애플씨"

Var greeting = "안녕하세요!"

If let name = 옵션 이름 {

그레팅 = "안녕하세요, (이름)"

}

OptionalName 을 nil 로 변경합니다. 인사는 무엇입니까? OptionalName 이 0 이면 else 문을 greeting 에 추가합니다.

다른 값을 지정하십시오.

변수의 선택적 값이 nil 이면 조건은 false 로 평가되고 중괄호 안의 코드는 생략됩니다. 0 이 아닌 경우 이 값은 문자에 할당됩니다.

상수 뒤에 이 값을 코드 블록에서 사용할 수 있도록 합니다.

Switch 는 정수와 테스트 방정식뿐만 아니라 모든 유형의 데이터와 다양한 비교 작업을 지원합니다.

야채 = "붉은 고추"

야채 전환 {

사례 셀러리:

Let vegetableComment = "건포도를 넣고 통나무에 개미를 만든다."

사례 "오이" "콩잎":

Let vegetableComment = "그것은 좋은 차 샌드위치가 될 것이다."

Case let x 여기서 x.has suffix ("pepper"):

Let vegetableComment = "매운가요 \(x)?"

기본값:

Let vegetableComment = "수프의 모든 맛이 좋다."

}

기본 문을 삭제하여 어떤 오류가 발생하는지 확인합니다.

Switch 에서 일치하는 절을 실행하면 프로그램은 switch 문을 종료하고 아래로 실행되지 않으므로 각 절에서 실행할 필요가 없습니다.

마지막에 break 쓰기

For-in 을 사용하여 사전을 트래버스할 수 있으며 각 키 값 쌍을 나타내는 두 개의 변수가 필요합니다.

재미있는 숫자 = [

"prime": [2,3,5,7, 1 1, 13],

피보나치: [1, 1, 2,3,5,8]

"square": [1,4,9,16,25],

] 을 참조하십시오

최대 var = 0

재미있는 숫자 중 (종류, 숫자)

숫자의 숫자 {

숫자> 최대 {

최대 = 수량

}

}

}

가장 큰

다른 변수를 추가하여 가장 큰 숫자 유형을 기록합니다.

While 을 사용하여 조건이 충족되지 않을 때까지 코드 조각을 반복합니다. 순환 조건은 시작 또는 끝에 있을 수 있습니다.

변수 n = 2

N< 100 {

N = n * 2 입니다

}

N

Var m = 2

을 (를) 하다

M = m * 2

} 그리고 m< 100

M

루프에서 사용할 수 있습니다. ...

Var firstForLoop = 0

0 의 I..& lt3 {

FirstForLoop += I

}

FirstForLoop

Var secondForLoop = 0

Var I = 0;; 나<3; ++i {

SecondForLoop += 1

}

SecondForLoop

사용 .....

Funcgreet (이름: string, day: string)-> 문자열 {

"안녕하세요 \ (이름), 오늘은 \ (일) 입니다. 클릭합니다

}

인사 ("밥", "화요일")

Day 매개변수를 삭제하고 매개변수를 추가하여 오늘 점심으로 무엇을 먹었는지 나타냅니다.

튜플을 사용하여 여러 값을 반환합니다.

Funcgetgasprices ()-> (더블, 더블, 더블)

반환 (3.59, 3.69, 3.79)

}

GetGasPrices ()

함수에는 함수에 배열로 나타나는 변수 수의 매개 변수가 있을 수 있습니다.

Func sumof (번호: int ...)-"; Int {

Var sum = 0

숫자의 숫자 {

합계+= 숫자

}

반환 합계

}

수모프 (동음이의)

SumOf(42597 12)

함수는 중첩될 수 있습니다. 중첩 함수는 외부 함수의 변수에 액세스할 수 있으며 중첩 함수를 사용하여 너무 길거나 복잡한 함수를 재구성할 수 있습니다.

을 눌러 섹션을 인쇄할 수도 있습니다.

Funcreturnfifth ()-> Int {

Var y = 10

Func add(){

Y += 5

}

추가 ()

Y 를 반환합니다

}

ReturnFifteen ()

함수는 첫 번째 유형의 유형이므로 다른 함수의 반환 값으로 사용할 수 있습니다.

Funcmakeincrementer ()-> (int-"; Int ){

Funcaddone (번호: int)-"; Int {

1+번호를 반환합니다

}

추가 항목을 반환합니다

}

Var increment = makeIncrementer ()

증분 (7)

한 함수를 다른 함수에 인수로 전달할 수도 있습니다.

Func 에는 일치하는 항목이 있습니다 (목록: Int [], 조건: Int-& gt;; Bool)-"; 부울 {

목록에 있는 항목의 경우 {

조건 (항목) {

True 를 반환합니다

}

}

False 를 반환합니다

}

Func less than ten (번호: int)-> 부울 {

반품 번호< 10

}

Var 번호 = [20,19,7, 12]

HasAnyMatches (10 보다 작은 숫자)

함수는 실제로 특별한 클로저입니다. {} 을 (를) 사용하여 익명 클로저를 만들 수 있습니다. 에서 를 사용하여 매개변수 및 반환 값 유형을 선언하고 닫습니다.

패키지된 기능체가 분리되다.

Numbers. map ({

(번호: int)-"; Int in

가정 결과 = 3 * 숫자

결과를 반송하다

}) 을 참조하십시오

클로저를 만드는 방법에는 여러 가지가 있습니다. 클로저 유형이 콜백 함수와 같이 알려진 경우 및 매개변수를 무시할 수 있습니다.

값을 반환합니다. 단일 명령문 클로저는 해당 명령문의 값을 결과로 반환합니다.

Numbers.map ({numberin3 * 번호})

이름 대신 매개변수 위치를 통해 매개변수를 참조할 수 있습니다. 이 방법은 매우 짧은 클로저에서 유용합니다. 폐쇄가 효과가 있을 때

마지막 매개 변수에 대한 함수를 전달할 때 바로 뒤에 괄호를 추가할 수 있습니다.

Sort ([1,5,3,12,2]) {$0 "; $ 1} 클래스 및 클래스 이름을 사용하여 클래스를 만듭니다. 클래스에 있는 속성의 선언은 상수 및 변수의 선언과 동일합니다. 단, 유일한 차이점은 해당 컨텍스트입니다.

메서드 및 함수 선언과 마찬가지로 유사한 클래스입니다.

클래스 모양 {

Var numberOfSides = 0

Funcsimpledescription ()-> 문자열 {

"\(number of sides) 막대 모서리가 있는 모양" 을 반환합니다

}

}

클래스의 인스턴스를 만들려면 클래스 이름 뒤에 괄호를 넣습니다. 도트 구문을 사용하여 인스턴스의 속성 및 메서드에 액세스합니다.

Var shape = Shape ()

Shape.numberOfSides = 7

Var shape description = shape.simpledescription ()

이 버전의 Shape 클래스에는 클래스 인스턴스의 생성자를 초기화하는 몇 가지 중요한 것이 없습니다. Init 를 사용하여 생성자를 만듭니다.

클래스 이름 모양 {

Var numberOfSides: Int = 0

변수 이름: 문자열

초기화 (이름: 문자열) {

Self.name = name

}

Funcsimpledescription ()-> 문자열 {

"\(number of sides) 막대 모서리가 있는 모양" 을 반환합니다

}

}

Self 는 인스턴스 변수를 구분하는 데 사용됩니다. 인스턴스를 만들 때 생성자 매개 변수는 함수 매개 변수를 전달하는 것처럼 클래스에 전달됩니다. 선언 (예: numberOfSides) 또는 생성자 (예: name) 를 통해 각 속성에 값을 지정해야 합니다. 객체를 삭제하기 전에 정리해야 하는 경우 deinit 를 사용하여 소멸자를 만듭니다. 하위 클래스는 클래스 이름 뒤에 상위 클래스의 이름을 추가하고 콜론으로 구분하여 정의합니다. 클래스를 만들 때 표준 루트 클래스가 필요하지 않으므로 상위 클래스를 무시할 수 있습니다.

하위 클래스가 상위 클래스의 메서드를 재정의하려면 override 태그를 사용해야 합니다. override 를 추가하지 않고 상위 클래스의 메서드를 덮어쓰면 컴파일러에서 오류를 보고합니다. 컴파일러는 override 로 표시된 메서드가 실제로 상위 클래스에 있는지 여부도 확인합니다.

클래스 사각형: 명명된 모양 {

가변 모서리 길이: 이중

Init (모서리 길이: Double, 이름: String ){

Self.sideLength = 모서리 길이

Super.init (이름: 이름)

면 수 = 4

}

Funcarea ()-> 이중 {

가장자리 길이 * 가장자리 길이를 반환합니다

}

Funcsimpledescription ()-> 문자열 {

모서리 길이가 ₩ (모서리 길이) 인 사각형을 반환합니다

}

}

Test = Square (모서리 길이: 5.2, 이름: "내 테스트 사각형") 를 가정합니다

테스트 영역 ()

Test.simpleDescription ()

Circle, NamedShape 의 또 다른 하위 클래스를 만듭니다. 생성자는 두 개의 인수를 받습니다. 하나는 반지름이고 다른 하나는 이름이며 면적 및 을 구현합니다.

방법을 설명하다.

속성에는 getter 와 setter 가 있을 수 있습니다.

Class EquilateralTriangle 삼각형: NamedShape {

Var 모서리 길이: Double = 0.0

Init (모서리 길이: Double, 이름: String ){

Self.sideLength = 모서리 길이

Super.init (이름: 이름)

면 수 = 3

}

가변 둘레: 이중 {

가져오기 {

3.0 * 변의 길이를 반환합니다

}

설정 {

모서리 길이 = 새 값/3.0

}

}

Funcsimpledescription ()-> 문자열 {

모서리 길이가 ₩ (모서리 길이) 인 등변 삼각형을 반환합니다

}

}

Var triangle = equilateral triangle (모서리 길이: 3. 1, 이름: "삼각형 하나")

삼각형. 둘레

삼각형. 둘레 = 9. 9

삼각형. 변길이

Perimeter setter 에서 newValue 의 이름은 newvalue 입니다. 설정 후 이름을 명시적으로 설정할 수 있습니다.

EquilateralTriangle 클래스의 생성자는 다음 세 단계를 수행합니다.

하위 클래스 선언의 속성 값을 설정합니다

상위 클래스의 생성자를 호출합니다.

상위 클래스 정의의 속성 값을 변경합니다. 호출 메서드, getters 및 setters 와 같은 다른 작업도 이 단계에서 수행할 수 있습니다.

속성을 계산할 필요는 없지만 새 값을 설정하기 전에 일부 코드를 실행해야 하는 경우 willSet 및 didSet 를 사용합니다.

예를 들어, 다음 클래스는 삼각형의 변의 길이가 항상 정사각형의 변의 길이와 같도록 합니다.

삼각형 사각형 클래스 {

Var 삼각형: 등변 삼각형 {

WillSet {

Square.sidelongth = newvalue.sidelongth

}

}

Var 사각형: 정사각형 {

WillSet {

삼각형. 모서리 길이 = 새 값. 변길이

}

}

Init (크기: double, name:String ){

Square = 사각형 (모서리 길이: 크기, 이름: 이름)

삼각형 = 등변 삼각형 (모서리 길이: 크기, 이름: 이름)

}

}

Var triangleandsquare = triangleandsquare (size:10, name: "다른 테스트 모양")

삼각형 사각형. 정사각형. 변길이

삼각형 사각형. 삼각형. 변길이

Triangleandsquare.square = square (모서리 길이: 50, 이름: "큰 사각형")

삼각형 사각형. 삼각형. 변길이

클래스의 메서드와 일반 함수 사이에는 중요한 차이점이 있습니다. 함수의 매개 변수 이름은 함수 내에서만 사용되지만 메서드의 매개 변수 이름은 에 있어야 합니다.

호출 시 명시적으로 선언 (첫 번째 매개 변수 제외). 기본적으로 메서드의 매개 변수 이름은 메서드의 매개 변수 이름과 동일하지만

메서드 내에서 사용되는 두 번째 이름을 정의할 수도 있습니다.

범주 카운터 {

Var count: Int = 0

Func increment by (금액: int, 번호 of times times: int) {

수+= 금액 * 횟수

}

}

Var counter = Counter ()

Counter. increment by(2, numberOfTimes: 7)

변수의 선택적 값을 처리할 때 추가할 수 있습니까? 。 만약? 이전 값은 0 이었습니다. 등

모든 내용은 무시되고 전체 표현식은 0 을 반환합니다. 그렇지 않으면요? 그 후의 모든 것이 운행될 것이다. 두 경우 모두 전체 테이블이

표현식의 값도 선택 사항입니다.

Let optionalSquare: 정사각형? = 사각형 (모서리 길이: 2.5, 이름: 선택 사각형)

Let sideLength = optionalSquare? 。 SideLength enum 을 사용하여 열거를 만듭니다. 클래스 및 기타 모든 명명 유형과 마찬가지로 열거형에는 메서드가 포함될 수 있습니다.

열거 수준: Int {

사례 Ace = 1

사례 2, 3, 4, 5, 6, 7, 8, 9, 10

잭, 여왕, 왕

Funcsimpledescription ()-> 문자열 {

자기 전환 {

사례. 에이스:

Ace 로 돌아가기

사례. 잭:

"잭" 으로 돌아가기

사례. 여왕:

"여왕" 으로 돌아가다

사례. 왕:

"왕" 으로 돌아가다

기본값:

문자열을 반환합니다 (self.toRaw ())

}

}

}

Ace = Rank 로 설정합니다. 걸출한/일류

Let aceRawValue = ace.toRaw ()

두 등급 값의 원래 값을 비교하여 비교하는 함수를 작성합니다.

위 예에서 열거된 원래 값의 유형은 Int 이므로 첫 번째 원래 값만 설정하면 됩니다. 나머지 원래 값은 순서대로 정렬됩니다.

임무. 문자열이나 부동 소수점 숫자를 열거의 초기 값으로 사용할 수도 있습니다.

ToRaw 및 fromRaw 함수를 사용하여 원래 값과 열거 값 사이를 변환합니다.

If let converted rank = rank.from raw (3) {

Let threedescription = convertedrank.simpledescription ()

}

열거된 멤버 값은 원래 값의 다른 표현식이 아니라 실제 값입니다. 실제로 원래 값이 의미가 없는 경우 설정할 필요가 없습니다.

열거 패키지 {

스페이드, 하트, 스퀘어, 매화

Funcsimpledescription ()-> 문자열 {

자기 전환 {

사례. 스페이드:

스페이드로 돌아가다

사례. 하트:

"하트" 로 돌아가기

사례. 다이아:

"다이아" 로 돌아가기

사례. 클럽:

클럽으로 돌아가다

}

}

}

하트를 적당하게 하다. 마음

Letheartsdescription = hearts.simpledescription ()

적절한 색상 방법을 추가하고 스페이드와 매화에 "검은색" 을 반환하고 하트와 사각형에 "빨간색" 을 반환합니다.

Hearts 멤버를 참조하는 두 가지 방법이 있습니다. hearts 상수에 값을 지정할 때 열거 멤버가 적합합니다. Hearts 는 전체 이름으로 참조해야합니다.

상수에는 명시적으로 지정된 유형이 없기 때문입니다. Switch 에서 열거 멤버는 약어로 표시됩니다. 마음, 자아의 가치는 이미 알려졌기 때문이다.

변수 유형이 알려진 경우 약어를 사용할 수 있습니다.

Struct 를 사용하여 구조를 작성합니다. 구조와 클래스에는 메서드 및 생성자와 같은 많은 유사점이 있습니다. 그들 중 가장 큰 것.

차이점은 구조가 값이고 클래스가 참조라는 것입니다.

패브릭 카드 {

Var 등급: 등급

Var 패키지: 패키지

Funcsimpledescription ()-> 문자열 {

반환 \

(suit.simpleDescription ()) "

}

}

ThreeOfSpades = Card (순위:. 셋째, 세트:. 스페이드)

Let three of spades description = three of spades.simpledescription ()

카드에 완전한 포커를 만들고 각 카드의 등급과 무늬와 어울리는 방법을 추가합니다.

열거 멤버의 인스턴스는 인스턴스 값을 가질 수 있습니다. 동일한 열거 멤버의 인스턴스는 다른 값을 가질 수 있습니다. 인스턴스를 만들 때 하나의 값만 전달하면 됩니다.

인스턴스 값은 원래 값과 다릅니다. 열거 멤버의 원래 값은 모든 인스턴스에 대해 동일하며 열거를 정의할 때 설정됩니다.

원래 값입니다.

예를 들어 서버에서 일출 및 일몰 시간을 얻는 것을 고려해 보십시오. 서버가 정상 결과 또는 오류 메시지를 반환합니다.

열거 서버 응답 {

사례 결과 (문자열, 문자열)

대소문자 오류 (문자열)

}

성공 = 서버 응답이라고 가정합니다. 결과 ("오전 6 시", "오후 8 시 09 분")

가정 실패 = 서버 응답. 오류 ("치즈가 다 떨어졌어요." ) 을 참조하십시오

전환 성공 {

사건 번호. 결과 (일출, 일몰):

Let serverResponse = "일출은 \ (일출) 에 있고 일몰은 \ (일몰) 에 있다."

사건 번호. 오류 (오류):

Let serverResponse = "실패 ... \ (오류)"

}

세 번째 case 를 ServerResponse 와 switch 에 추가합니다.

ServerResponse 에서 일출 및 일몰 시간을 추출하는 방법을 확인합니다. 프로토콜을 사용하여 인터페이스를 선언합니다.

프로토콜 예제 프로토콜 {

Var simpleDescription: 문자열 {get}

돌연변이 함수 조정 ()

}

클래스, 열거 및 구조는 인터페이스를 구현할 수 있습니다.

클래스 SimpleClass: ExampleProtocol {

Var simpleDescription: String = "매우 간단한 클래스입니다

Var another property: int = 69105

함수 조정 () {

SimpleDescription += "이제 100% 가 조정되었습니다. "라고 말합니다

}

}

Var a = SimpleClass ()

조정

가정 설명 = 간단한 설명

간단한 구조: 예제 프로토콜 {

Var simpleDescription: String = "간단한 구조"

변동 함수 조정 () {

간단한 설명+= "(조정됨)"

}

}

Var b = SimpleStructure ()

조정 ()

Bdescription = B. 간단한 설명

이 인터페이스를 구현하는 열거를 작성하십시오.

Mutating 키워드는 SimpleStructure 가 선언될 때 구조가 변경되는 방법을 표시하는 데 사용됩니다. 단순 클래스 문

클래스의 메서드는 일반적으로 클래스를 수정하기 때문에 어떤 메서드에도 태그를 지정할 필요가 없습니다.

확장을 사용하여 기존 유형에 계산된 속성을 추가하는 방법과 같은 기능을 추가합니다. 확장을 사용하여 모든 유형을 제공할 수 있습니다

프로토콜을 추가합니다. 외부 라이브러리 또는 프레임워크에서 가져온 유형도 추가합니다.

확장 Int: ExampleProtocol {

Var 간단한 설명: 문자열 {

숫자 \ (자체) 를 반환합니다

}

변동 함수 조정 () {

Self += 42

}

}

간단한 설명

Double 유형에 대한 확장을 작성하고 absoluteValue 함수를 추가합니다.

다른 이름 지정 유형과 마찬가지로 인터페이스 이름을 사용할 수 있습니다. 예를 들어 하나의 인터페이스를 구현하는 서로 다른 유형의 객체 세트를 만들 수 있습니다.

닫기. 인터페이스 유형의 값을 처리할 때는 인터페이스 외부에 정의된 메서드를 사용할 수 없습니다.

Let protocol value: example protocol = a.

프로토콜 값입니다. 간단한 설명

//protocolvalue.anotherproperty//주석 처리를 취소하여 오류를 확인합니다

ProtocolValue 변수의 런타임 유형이 simpleClass 인 경우에도 컴파일러에서 해당 유형을 ExampleProtocol 로 처리합니다. 이 시계

클래스가 구현하는 인터페이스 외부에서 구현할 수 없는 메서드 또는 속성을 나타냅니다. 꺾쇠 괄호에 이름을 써서 제네릭 함수나 유형을 만듭니다.

Func 반복< 항목 유형> (항목: 항목 유형, 시간: int)-"; 항목 유형 [] {

Var result = ItemType [] ()

0 의 I..& lt 수 {

결과+= 프로젝트

}

결과를 반송하다

}

반복 ("노크", 4)

일반 클래스, 열거 및 구조를 만들 수도 있습니다.

//Swift 표준 라이브러리의 선택적 유형 재구현

열거 옵션 값<T>{

사례 없음

사례 일부 (t)

}

Var possibleInteger: 선택적 값 <Int & gt=. 없음

PossibleInteger =. 일부 (100)

유형 이름 뒤에 where 를 사용하여 요구 사항 목록을 지정합니다. 예를 들어 구현 프로토콜 유형을 제한하려면 두 가지 유형을 제한해야 합니다.

동일하거나 특정 상위 클래스가 있는 클래스를 제한합니다.

Func anyCommonElements & ltT, u 여기서 t: 시퀀스, u: 시퀀스, T.GeneratorType:

Equatable, T. generatortype.element = = u. generatortype.element > (lhs: T, RHS: u)-"; 부울 {

Lhs 에 있는 lhsitem 의 경우 {

Rhs 에서 rhsitem 의 경우 {

LhsItem == rhsItem {

True 를 반환합니다

}

}

}

False 를 반환합니다

}

모든 공통 요소 ([1, 2,3], [3])

AnyCommonElements 함수를 수정하여 두 개의 시퀀스 * * * 개 요소가 포함된 배열을 반환하는 함수를 생성합니다.

간단히 하기 위해 where 를 무시하고 콜론 뒤에 인터페이스 또는 클래스 이름만 쓸 수 있습니다. & ltt: 등가물. 그리고