중화사전망 - 자전 검색 - SWIFT 소개
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: 등가물. 그리고