swift 기초 부분 수기
연산 자 는 1 원, 2 원, 3 원 연산 자로 나 뉜 다.
(!b)
에 바짝 따라 야 하 며, 사후 연산 자 는 조작 대상 뒤 (c!)
(2 + 3)
은 중간 에 설치 되 어 있다. 왜냐하면 그들 은 두 조작 대상 사이 에 나타 나 기 때문이다.(a ? b : c)
tips 잉여 연산 자 에서 나 누 는 기 호 는 무시 되 고 다른 영향 을 주지 않 습 니 다
-9 % -2 = -9 % 2
공 합 연산 자 a! =nil ? a! : b 등가 a?b 구간 연산 자 1... 5 는 1 에서 5 폐 구간 1... < 5 는 1 에서 4 반 까지 구간 을 표시 합 니 다.전의 문자 \ 0 (빈 문 자 는 0), \ (역 사선), \ t (수평 탭 문자), (줄 바 꿈), \ r (리 턴 문자), '(작은 따옴표),' (작은 따옴표).
2 문자열 과 문자
빈 문자 아래 두 가 지 는 등가 의 var empty String = "var anotherEmpty String = String () 문자열 은 값 형식 입 니 다. 새로운 문자열 을 만 들 었 다 면 상수, 변수 할당 작업 을 하거나 함수, 방법 에서 전달 할 때 복사 합 니 다.
3. 배열 과 사전
배열 은 isEmpty 로 배열 이 빈 배열 의 count 가 0 인지 판단 할 수 있 습 니 다. isEmpty 는 true 사전 으로 updateValue 로 값 을 수정 하고 값 을 추가 할 수 있 으 며 값 을 제거 할 수도 있 습 니 다.
if #available(iOS 10, macOS 10.12, *) {
// iOS iOS 10 API, macOS macOS 10.12 API
} else {
// iOS macOS API
}
if #available(platform name version, ..., *) {
APIs ,
} else {
APIs ,
}
5 가 변 매개 변수
가 변 매개 변 수 는 0 개 이상 의 값 을 받 아들 일 수 있 습 니 다. 함수 호출 시 가 변 매개 변수 로 함수 매개 변 수 를 지정 하면 불확실 한 수의 입력 값 을 입력 할 수 있 습 니 다. 변수 함수 이름 뒤에 추가
...
방식 으로 가 변 매개 변 수 를 정의 할 수 있 습 니 다.
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
// 3.0, 5 。
arithmeticMean(3, 8.25, 18.75)
// 10.0, 3 。
:
6 입 출력 매개 변수
함수 매개 변 수 는 기본적으로 상수 입 니 다. 함수 체 에서 매개 변수 값 을 변경 하려 고 하면 컴 파일 오류 가 발생 할 수 있 습 니 다.
함수 에서 매개 변수 값 을 수정 하려 면 입 출력 매개 변수 로 정의 해 야 합 니 다. 매개 변수 정의 전 inout 키 워드 는 입력 매개 변수 앞 에 & 부 호 를 추가 해 야 합 니 다. 바로 이 값 은 함수 에 의 해 수정 할 수 있 습 니 다.
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// "someInt is now 107, and anotherInt is now 3"
:
。 swapTwoInts , someInt anotherInt 。 。
특수 문자
전의 자
\0
(빈 문자), \\
(역 사선) \t
(수평 탭 문자)
(줄 바 꿈 문자), /r
(리 턴 문자), \"
(더 블 따옴표) \'
(작은 따옴표). 접두사 / 접 두 사 는 문자열 을 호출 하 는 hasPrefix (:) / hasSuffix (:) 를 통 해 같 습 니 다.방법 은 문자열 이 특정한 접두사 / 접 두 사 를 가지 고 있 는 지 확인 합 니 다. 두 방법 은 모두 하나의 string 형식의 인 자 를 받 아들 이 고 불 값 을 되 돌려 줍 니 다.8 함수
모든 함수 에는 특정한 함수 유형 이 있 고 함수 의 유형 은 함수 의 매개 변수 유형 과 반환 유형 으로 구성 된다.
func minMax(array:[Int]) -> (min:Int, max:Int)? {}
선택 가능 한 원 그룹 형식 은 원 그룹의 모든 요소 값 을 선택 할 수 있 는 것 이 아니 라 전체 원 그룹 을 선택 할 수 있 음 을 표시 합 니 다
(min:Int?,max:Int?)
.fun someInt(_ someInt:Int = 1) {}
일반적인 상황 에서 우 리 는 기본 매개 변수 값 이 없 는 매개 변 수 를 함수 매개 변수 목록 앞 에 놓 고 기본 매개 변 수 를 함수 매개 변수 목록 뒤에 놓 습 니 다.
func mathAdd(first:Int,second:Int) -> Int {
return first + second
}
var mathfunction:(Int,Int) -> Int = mathAdd(first:second:)
mathfunction(4, 6)
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
func stepForward(input: Int) -> Int { return input + 1 }
func stepBackward(input: Int) -> Int { return input - 1 }
return backward ? stepBackward : stepForward
}
폐쇄
패 킷 을 닫 는 것 은 포 함 된 함수 코드 블록 입 니 다. 코드 에서 패 킷 을 전달 하고 사용 하면 컨 텍스트 의 임의의 상수 와 변 수 를 캡 처 하고 저장 할 수 있 습 니 다. 패 킷 상수 와 변수 라 고 합 니 다. 패 킷 을 닫 는 표현 식 에 서 는 함수 와 반환 값 형식 이 괄호 가 아 닌 괄호 안에 적 혀 있 습 니 다. 패 킷 을 닫 는 함수 체 부분 에 키워드
in
가 있 습 니 다.도입, 이 키 워드 는 패 킷 을 닫 는 매개 변수 와 반환 형식 정의 가 완료 되 었 음 을 나타 내 며, 패 킷 함수 체 가 곧 시 작 됩 니 다.
{(parameters)-> returntype in
sttements
}
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
패 킷 을 닫 는 완전한 쓰기 도 제 가 현재 사용 하고 있 는 것 입 니 다. 패 킷 을 닫 는 매개 변수 와 반환 유형 을 모두 설명 하고
in
뒤에 논 리 를 씁 니 다.names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
names.sorted { (a, b) -> Bool in
return a > b
}
names.sorted { (a, b) -> Bool in
a > b
}
sorted(by:)
방법의 매개 변수 로 들 어 오기 때문에 swift 는 그 매개 변수 와 반환 값 유형 을 추측 할 수 있다. 그러면 유형 을 지정 하지 않 고 간단하게 쓸 수 있다 names.sorted(by: { s1, s2 in return s1 > s2 } )
names.sorted(by: { s1, s2 in s1 > s2 } )
이 예 에서
sorted(by:)
방법 매개 변수 유형 은 패 킷 을 닫 으 려 면 bool 형식 으로 돌아 가 야 한 다 는 것 을 명 확 히 했 습 니 다. 패 킷 함수 체 는 하나의 표현 식 (s1 > s2)
만 포함 되 어 있 습 니 다. 이 표현 식 은 Bool 형식 값 으로 돌아 가기 때문에 잘못된 뜻 이 없습니다. return 키 워드 는 생략 할 수 있 습 니 다.names.sorted(by: { $0 > $1 } )
패 킷 식 에서 매개 변수 이름 줄 임 말 을 사용 하면 패 킷 에서 매개 변수 목록 을 생략 할 수 있 으 며, 매개 변수 이름 줄 임 말 유형 은 함수 형식 으로 추정
in
키 워드 를 생략 할 수 있 습 니 다. 이 경우 패 킷 식 은 패 킷 함수 로 구성 되 어 있 기 때 문 입 니 다. $0
'$1' 과 함께 패키지 의 첫 번 째 와 두 번 째 String 형식의 인 자 를 표시 합 니 다.names.sorted(by: >)
위의 예 에서 닫 힌 표현 식 을 더 간단하게 작성 할 수 있 습 니 다. Swift 의 String 형식 은 번호 (>) 이상 의 문자열 을 정의 합 니 다. 함수 로 서 두 개의 String 형식의 인 자 를 받 아들 이 고 Bool 형식의 값 을 되 돌려 줍 니 다. 이것 은 sorted (by:) 와 같 습 니 다.방법의 매개 변수 에 필요 한 함수 형식 이 일치 합 니 다. 따라서 번호 보다 큰 문자열 함 수 를 간단하게 전달 할 수 있 습 니 다. Swift 는 번호 보다 큰 문자열 함 수 를 사용 하고 싶 은 지 자동 으로 추정 할 수 있 습 니 다.
reversedNames = names.sorted() { $0 > $1 }
reversedNames = names.sorted { $0 > $1 }
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
이 방법 은 반환 유형
()-> Int
이라는 것 은 하나의 함수 가 incrementer
이 함수 에서 위의 잔 무늬 에서 이 두 값 runningTotal
과 amount
의 인용 을 캡 처 한 것 을 의미 합 니 다. 캡 처 인용 은 이 두 변 수 를 호출 makeIncrementer
한 후에 사라 지지 않 고 다시 한 번 실행 incrementer
함 수 를 쓸 때 runningTotal
여전히 저장 하도록 보장 합 니 다.let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()
// 10
incrementByTen()
// 20
incrementByTen()
// 30
var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
completionHandlers.append(completionHandler)
}
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 1) {
completionHandler()
}
}
tips: 닫 힌 패 키 지 를 @ escaping 으로 표시 합 니 다. 닫 힌 패 키 지 를 표시 해 야 한다 고 생각 합 니 다 self
var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
print(customersInLine.count)
// "5"
let customerProvider = { customersInLine.remove(at: 0) }
print(customersInLine.count)
// "5"
print("Now serving \(customerProvider())!")
// Prints "Now serving Chris!"
print(customersInLine.count)
// "4"
패 킷 을 닫 는 코드 에서 customerInLine 의 첫 번 째 요 소 는 제거 되 었 지만, 패 킷 이 호출 되 기 전에는 이 요 소 는 제거 되 지 않 습 니 다. 이 패 킷 이 영원히 호출 되 지 않 는 다 면, 패 킷 안에 있 는 표현 식 은 영원히 실행 되 지 않 습 니 다. 목록 에 있 는 요 소 는 영원히 제거 되 지 않 습 니 다. customerProvider 의 종 류 는 String 이 아 닙 니 다., () - > String 입 니 다. 인자 가 없고 값 을 String 으로 되 돌려 주 는 함수 입 니 다.
패 킷 을 매개 변수 로 함수 에 전달 할 때 같은 지연 값 을 구 할 수 있 습 니 다.
// customersInLine is ["Alex", "Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: () -> String) {
print("Now serving \(customerProvider())!")
}
serve(customer: { customersInLine.remove(at: 0) } )
// "Now serving Alex!"
이 serve (customer:) 함 수 는 고객 의 이름 을 되 돌려 주 는 현식 패 키 지 를 받 습 니 다. 아래 버 전의 serve (customer:) 는 같은 동작 을 완 료 했 지만, 현식 패 키 지 를 받 아들 이지 않 고, 인 자 를 @ autoclosure 로 표시 해서 자동 패 키 지 를 받 습 니 다. 이 함 수 를 패 키 지 않 고 String 형식의 인자 로 받 아들 일 수 있 습 니 다.이 매개 변 수 는 @ autoclosure 특성 이 표시 되 어 있 기 때문에 customerProvider 매개 변 수 는 자동 으로 닫 힌 패키지 로 전 환 됩 니 다.
// customersInLine is ["Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: @autoclosure () -> String) {
print("Now serving \(customerProvider())!")
}
serve(customer: customersInLine.remove(at: 0))
// "Now serving Ewa!"
자동 으로 가방 을 닫 고 도망 갈 수 있 는 것 을 원한 다 면 @ autolosure 와 @ escaping 속성 을 동시에 사용 합 니 다.
// customersInLine i= ["Barry", "Daniella"]
var customerProviders: [() -> String] = []
func collectCustomerProviders(_ customerProvider: @autoclosure @escaping () -> String) {
customerProviders.append(customerProvider)
}
collectCustomerProviders(customersInLine.remove(at: 0))
collectCustomerProviders(customersInLine.remove(at: 0))
print("Collected \(customerProviders.count) closures.")
// "Collected 2 closures."
for customerProvider in customerProviders {
print("Now serving \(customerProvider())!")
}
// "Now serving Barry!"
// "Now serving Daniella!"
지식 이 약 하 다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.