勉強する.1公式文書記録(一)——Basic Operator
18746 ワード
勉強する.1公式文書記録(一)——Basic Operator前言 1、一元、二元、三元演算子 2、付与演算子(Assignment Operator) 3、負の値を持つ剰余計算 4、複合割付演算子 5、比較演算子におけるタプル比較 ユニット比較前提 タプル比較規則 6、三元演算子と空合演算子(?) 三元演算子 Null演算子 7、範囲演算子(Range Operators) 前言
この文書は本人のためにSWIFT 5を勉強する.1公式文書の過程で記録する必要がある点とテストの過程で出会った問題を記録する文書は、勉強してから時間があれば新しいことを知ることを目的としている.私はSWIFTを1ヶ月以上勉強したばかりの菜鳥なので、記録の過程で間違いがあったら許してください.
1、一元、二元、三元演算子
2、代入演算子(Assignment Operator)
3、負の値を持つ余剰計算
4、複合賦値演算子
5、比較演算子のメタグループ比較
メタグループ比較の前提条件
メタグループ比較規則
6、三元演算子と空合演算子(?)
さんげんえんざんし
Null演算子
テストを行います.
出力結果はabcで間違いないと思っていたが、出力はOptional(「abc」)で、ちょっとおもしろくて、テストを続けた.
結論:空合演算子a??b,aに値がある場合bがオプションタイプであればaは解包せず,bがオプションタイプでなければaは解包する.では、これはなぜですか.上記の三元演算子の等価関数に類型判定を加え、以下のようにテストする.
param 1とparam 2はいずれもTタイプ、つまりSWIFTはタイプ推定を行う際にどちらかがOptionalタイプ、1つがBタイプであれば、TをOptionalタイプと推定するのですが、なぜこのように推定するのでしょうか.OptionalはBと下に互換性があるので、以上の予想外の結果を招いたと理解できます.
空合演算子の意味は、任意のタイプに値がない場合に初期値が与えられ、パケット解除後のタイプに属していることを確認することであり、設計の初心はbに任意のタイプを伝えないことである.だから私がこんなに分析しても実際には意味がありません~
7、範囲演算子(Range Operators)
この文書は本人のためにSWIFT 5を勉強する.1公式文書の過程で記録する必要がある点とテストの過程で出会った問題を記録する文書は、勉強してから時間があれば新しいことを知ることを目的としている.私はSWIFTを1ヶ月以上勉強したばかりの菜鳥なので、記録の過程で間違いがあったら許してください.
1、一元、二元、三元演算子
: , +a( , ),-a,!a,c!
: , a+b , a-b
: , , a ? b : c
2、代入演算子(Assignment Operator)
Swift C Object-C, 。
if x = y {
// , x = y
}
C , , :
#include
int main()
{
int t = 4;
printf("%d, %d, t = %d
", (t*=2), (t-=2), t);
return 0;
}
C , , printf
( ),
:4,4,t=4
3、負の値を持つ余剰計算
a % b
a = ( b * multiplier ) + reminder
b * multiplier a
:
1. -9 % 2
2 * multiplier -9, multiplier = -4
-9 = -8 + -1 , reminder = -1
2. -30 % -8
-8 * multiplier -30, multiplier = 4
-30 = -32 + 2, reminder = 2
4、複合賦値演算子
a += 3 a = a + 3 ,
, :
let b = a += 2
5、比較演算子のメタグループ比較
メタグループ比較の前提条件
。 :
(1,"2",3) (2,"4") , 。
(1,"2",3) (2,"4","5") , 。
:
1、BOOL (1,true) > (0,false)
2、SWIFT 7 , >=7
, 。
メタグループ比較規則
:
, true , 。
false , true 。 :
(2,"B",3.5) > (3,"A",2.2)
1. 2 > 3 false, ;
2. "B" > "A" true, true, 。
:
1、 ASCII
2、 ,
3、 ,
:
1、"A" > "B" 65 > 66 false
2、"ABCD" > "ACC" A , ,B < C false
3、"abCd1" > "abCd" abCd , , true
ASCII :1-9 < A-Z < a-z
6、三元演算子と空合演算子(?)
さんげんえんざんし
question ? answer1 : answer2
, :
func test<T>(Bool: question,T: answer1,T: answer2) -> T {
if question {
return answer1
}else{
return answer2
}
}
:
1、answer1 answer2 , 。
2、 ,
var b = 4
var a = b > 3 ? "b 3" : "b 3"
var c = test(question: b > 3,answer1: "b 3",answer2: "b 3")
print(a)
print(c)
:
b 3
b 3
Null演算子
a ?? b, a ,b T
a 、 nil, a!, a a=nil, b
a ?? b
a != nil ? a! : b
テストを行います.
var str:String? = "abc"
var str1 = str ?? nil
print(str1)
出力結果はabcで間違いないと思っていたが、出力はOptional(「abc」)で、ちょっとおもしろくて、テストを続けた.
var str:String? = "abc"
var str1 = str ?? nil
var str2 = str ?? "none"
print(str1)
print(str2)
:
Optional("abc")
abc
結論:空合演算子a??b,aに値がある場合bがオプションタイプであればaは解包せず,bがオプションタイプでなければaは解包する.では、これはなぜですか.上記の三元演算子の等価関数に類型判定を加え、以下のようにテストする.
func test<T>(Bool: condition,T: param1,T: param2) -> T {
if type(of:param1) == String.self{
print("param1 is String")
}
if type(of:param1) == Optional<String>.self{
print("param1 is Optional")
}
if type(of:param2) == String.self{
print("param2 is String")
}
if type(of:param2) == Optional<String>.self{
print("param2 is Optional")
}
if condition{
return param1
}else{
return param2
}
}
var optStr:String? = "a"
test(condition: true,param1:optStr,param2:"a")
:
param1 is Optional
param2 is Optional
test(condition: true,param1:optStr!,param2:optStr)
:
param1 is Optional
param2 is Optional
test(condition: true,param1:optStr!,param2:"b")
:
param1 is String
param2 is String
param 1とparam 2はいずれもTタイプ、つまりSWIFTはタイプ推定を行う際にどちらかがOptionalタイプ、1つがBタイプであれば、TをOptionalタイプと推定するのですが、なぜこのように推定するのでしょうか.OptionalはBと下に互換性があるので、以上の予想外の結果を招いたと理解できます.
空合演算子の意味は、任意のタイプに値がない場合に初期値が与えられ、パケット解除後のタイプに属していることを確認することであり、設計の初心はbに任意のタイプを伝えないことである.だから私がこんなに分析しても実際には意味がありません~
7、範囲演算子(Range Operators)
。
a...b [a,b] 0...2 0,1,2
a..
var arr = ["a","b","c","d"]
for param in arr[...2]{
print(param)
}
a b c
for param in arr[2...]{
print(param)
}
c d
for param in arr[...]{
print(param)
}
a b c d
for param in arr{
print(param)
}
a b c d
for param in arr[..<]{ //
}
, ,
,
var element = 101
let range = 100...200
if range.contains(element){
...
}