제3장.연산자
19302 단어 연산자
용어
연산자는 한 개, 두 개와 세 개의 연산자가 있다.
하나의 연산자가 하나의 대상을 조작한다. 예를 들어 -a.
하나의 연산자는 전치 연산자와 후치 연산자로 나뉘는데 전치 연산자는 조작 대상을 바로 배열해야 한다. 예를 들어!b, 후치 연산자는 조작 대상의 뒤, 예를 들어 i++,
두 눈 연산자는 두 개의 조작 대상을 조작한다. 예를 들어 2+3.두 작업 대상 사이에 나타나기 때문에 중치입니다.
세 개의 연산자는 세 개의 조작 대상을 조작한다. C 언어와 마찬가지로 Swift는 세 개의 연산자가 하나밖에 없다. 바로 세 개의 조건 연산자 a?b : c.
연산자의 영향을 받는 값을 조작수라고 하는데 표현식 1+2에서 더하기 +는 쌍안 연산자이고 그의 두 조작수는 값 1과 2이다.
대입 연산자
부수 연산 a=b는 b의 값으로 a의 값을 초기화하거나 업데이트하는 것을 나타낸다.
1 let b = 10
2 var a = 5
3 a = b
4 // a 10
만약 값의 오른쪽이 다원 그룹이라면, 그 원소는 바로 여러 변수나 변수를 분해할 수 있다
1 let (x, y) = (1, 2)
2 // x 1, y 2
C 언어 및 Objective-C와 달리 Swift의 값 지정 작업은 값을 반환하지 않습니다.따라서 다음 코드가 잘못되었습니다.
1 if x = y {
2 // , x = y
3 }
수치 연산
Swift는 모든 수치 유형에서 기본 4가지 연산을 지원합니다.
덧셈 +
뺄셈-
곱셈*
나눗셈/
1 1 + 2 // 3
2 5 - 3 // 2
3 2 * 3 // 6
4 10.0 / 2.5 // 4.0
더하기 작업 + 문자열 맞춤법 사용:
1 "hello, " + "world" // "hello, world"
구여연산
1 9 % 4 // 1
2 -9 % 4 // -1
주의: 음수에 대한 여분을 구할 때, 음수의 기호는 무시됩니다.이것은 a%b와 a%-b의 결과가 같다는 것을 의미한다.
부동점수 구여 계산
1 8 % 2.5 // 0.5
이 예에서 8을 2.5로 나누면 3여 0.5이기 때문에 결과는 0.5이다.
자증과 자감 연산
1 var i = 0
2 ++i // i = 1
++i를 한 번 호출할 때마다 i의 값은 1을 추가합니다.실상
++와 --전치이자 후치 연산.++i,i++,--i와 i-는 모두 효과적인 문법이다.
차이점은 다음과 같습니다.
1 var a = 0
2 let b = ++a // a b 1
3 let c = a++ // a 2, c a 1
상술한 예에서letb=++a는 먼저 a를 1로 추가한 다음에 a의 값을 되돌려준다.그래서 a와 b는 모두 새 값이다.
한편letc=a++는 먼저 a의 값을 되돌린 다음에 a가 1을 더한다.그래서 c는 a의 구치 1을 얻었고 a에 1을 더하면 2가 되었다.
먼저 수정한 후에 이런 행위가 우리의 논리에 더욱 부합되기 때문에++i와 --i를 사용하는 것을 추천합니다.
홀수 마이너스
숫자 값의 양수 및 음수는 접두어 - (즉 음수) 를 사용하여 전환할 수 있습니다.
1 let three = 3
2 let minusThree = -three // minusThree -3
3 let plusThree = -minusThree // plusThree 3, " 3"
주의: 한 개의 음표는 조작수 앞에 쓰여 있으며, 중간에 빈칸이 없습니다.
단목 정호
단일 정호 + 아무런 변경도 없이 조작수의 값을 되돌려줍니다.
1 let minusSix = -6
2 let alsoMinusSix = +minusSix // alsoMinusSix -6
단목 + 는 쓸데없는 짓이지만, 단목 마이너스로 마이너스를 표현할 때, 단목 마이너스로 정수를 표현할 수 있다. 그러면 코드가 대칭미가 있을 것이다.
대입 연산자
Swift는 또한 기타 연산자와 대입 연산자=를 조합한 복합 대입 연산자를 제공하며, 가부 연산자+=는 그 중의 한 예이다.
var a = 1
a += 2 // a 3
표현식 a+=2는 a=a+2의 약자로서 하나의 가부 연산은 가법과 부수 두 가지 일을 완성했다.
주의: 복합 할당 연산에는 반환 값이 없습니다.let b = a + = 2와 같은 코드는 오류입니다.이것은 위에서 언급한 자증과 자감 연산자와 다르다.
비교 연산
각 비교 연산은 식별 표현식의 부울 값을 반환합니다.
1 == 1 // true, 1 1
2 != 1 // true, 2 1
2 > 1 // true, 2 1
1 < 2 // true, 1 2
1 >= 1 // true, 1 1
2 <= 1 // false, 2 1
비교 연산은 if 조건과 같은 조건문에 많이 사용됩니다.
let name = "world"
if name == "world" {
println("hello, world")
} else {
println(" , \(name), !")
}
// "hello, world", `name` "world"
주의: Swift도 항등==과 불항등!==이 두 비교부호는 두 대상이 같은 대상의 실례를 인용하는지 아닌지를 판단한다.더 많은 세부 사항은 유형과 구조에 있다.
세 가지 조건 연산
삼목 조건 연산의 특수성은 그것이 세 개의 조작수가 있는 연산자라는 데 있는데, 그것의 원형은 문제입니까?정답 1: 정답 2.그것은 문제의 성립 여부에 따라 둘 중 하나를 선택하는 조작을 간결하게 표현한다.
만약 문제가 성립되면 답안 1의 결과를 되돌려준다.
만약 성립되지 않는다면, 답안 2의 결과를 되돌려준다.
여기에 계산 표의 줄이 높은 예가 있다.만약 시계 헤드가 있다면 그 줄의 높이는 내용 높이보다 50픽셀이 높아야 한다.만약 시계 헤드가 없다면, 단지 20픽셀보다 높을 뿐이다.
1 let contentHeight = 40
2 let hasHeader = true
3 var rowHeight = contentHeight
4 if hasHeader {
5 rowHeight = rowHeight + 50
6 } else {
7 rowHeight = rowHeight + 20
8 }
9 // rowHeight 90
세 개의 연산자를 사용하여 단순화하면 다음을 수행할 수 있습니다.
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight 90
두 번째 단락의 코드 예는 세 가지 조건 연산을 사용했기 때문에 한 줄의 코드는 우리로 하여금 정확한 답안을 얻을 수 있게 한다.이것은 첫 번째 코드보다 훨씬 간결하다. rowHeight를 변수로 정의할 필요가 없다. 왜냐하면 그 값은if문장에서 바꿀 필요가 없기 때문이다.
구간 연산자
Swift는 한 구간의 값을 쉽게 표현할 수 있는 두 개의 연산자를 제공합니다.폐구간과 반폐구간
폐구간 연산자
닫힌 구간 연산자 a...b는 a에서 b(a와 b 포함)까지의 모든 값을 포함하는 구간을 정의합니다.닫힌 구간 연산자는 한 구간의 모든 값을 교체할 때 매우 유용하다. 예를 들어 for-in 순환에서:
for index in 1...5 {
println("\(index) * 5 = \(index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25
반폐구간
반폐구간의 실용성은 0부터 시작하는 목록 (예: 그룹) 을 사용할 때 0에서 목록의 길이를 세는 데 매우 편리하다는 데 있다.
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
println(" \(i + 1) \(names[i])")
}
// 1 Anna
// 2 Alex
// 3 Brian
// 4 Jack
주의: 그룹에는 4개의 원소가 있지만 0...count는 반폐구간이기 때문에 3까지만 셀 수 있습니다.
논리 연산
논리 연산의 조작 대상은 논리 브리 값이다.Swift는 C 언어 기반의 세 가지 표준 논리 연산을 지원합니다.
논리 비!a
논리와 a & b
논리 또는 a | | b
논리적 오류
논리 비연산!a 부울 값을 반대로 하여true는false,false는true로 바꿉니다.
그것은 작업 수 앞에 나타나야 하며 빈칸을 넣지 않는 선행 연산자이다.a가 아닌 것으로 읽으면 다음과 같습니다.
let allowedEntry = false
if !allowedEntry {
println("ACCESS DENIED")
}
// prints "ACCESS DENIED"
논리와
논리와 a&&b는 a와 b의 값이true일 때만 전체 표현식의 값이true임을 나타낸다.
임의의 값이false라면 전체 표현식의 값은false입니다.사실상, 만약 첫 번째 값이false라면, 두 번째 값을 계산하지 않을 것이다. 왜냐하면 그것은 이미 전체 표현식의 결과에 영향을 줄 수 없기 때문이다.이것은 단락 계산이라고 불린다.
두 값이 모두 true인 경우에만 액세스가 허용됩니다.
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// "ACCESS DENIED
논리 또는
논리 또는 a | | b는 두 개의 연속된 |로 구성된 중치 연산자입니다.그것은 두 개의 논리 표현식 중 하나가true이고 전체 표현식은true임을 나타낸다.
논리와 연산이 유사하고 논리 또는'단거리 계산'이기도 하다. 왼쪽의 표현식이true일 때 오른쪽의 표현식을 계산하지 않는다. 왜냐하면 전체 표현식의 값을 바꿀 수 없기 때문이다.
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// "Welcome!"
조합 논리
우리는 여러 개의 논리 연산을 조합하여 하나의 복합 논리를 표현할 수 있다.
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// "Welcome!"
괄호를 사용하여 우선 순위 지정
복잡한 표현식이 쉽게 읽을 수 있도록 적당한 곳에 괄호를 사용해서 우선순위를 명확히 하는 것은 효과적이다. 비록 필요하지는 않지만.지난번 문에 대한 권한의 예에서, 우리는 첫 번째 부분에 괄호를 붙여서, 그것을 사용하면 논리가 더욱 명확해 보인다.
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// prints "Welcome!"
이 괄호는 앞의 두 값을 전체 논리적 표현의 독립된 부분으로 간주한다.괄호가 있는 것과 괄호가 없는 출력 결과는 같지만 코드를 읽는 사람에게는 괄호가 있는 코드가 더 뚜렷하다.간결성보다 읽기 용이성
원문: http://www.cocoachina.com/ios/20140611/8767.html
2015-03-18
21:46:23
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
4일차 java - 변수와 연산자2) 영문자,숫자,_를 사용할 수 있다. 3) 예약어를 사용할 수 없다(int나 String같은 기능이 있는 단어는 안됨) 4)특수문자, 공백을 사용할 수 없고, 숫자로 변수명이 시작되면 안된다. 자료형(Data T...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.