<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.tiffa.net/w/index.php?action=history&amp;feed=atom&amp;title=Swift%2FOperator</id>
	<title>Swift/Operator - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tiffa.net/w/index.php?action=history&amp;feed=atom&amp;title=Swift%2FOperator"/>
	<link rel="alternate" type="text/html" href="https://wiki.tiffa.net/w/index.php?title=Swift/Operator&amp;action=history"/>
	<updated>2026-09-17T17:45:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.tiffa.net/w/index.php?title=Swift/Operator&amp;diff=2249&amp;oldid=prev</id>
		<title>imported&gt;Fire at 02:54, 15 November 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.tiffa.net/w/index.php?title=Swift/Operator&amp;diff=2249&amp;oldid=prev"/>
		<updated>2022-11-15T02:54:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Swift の演算子&lt;br /&gt;
&lt;br /&gt;
= 代入演算子(Assignment Operator) =&lt;br /&gt;
&lt;br /&gt;
いわゆる代入 a=b で、aにbを代入することができる。&lt;br /&gt;
&lt;br /&gt;
タプルを使うことで一度に複数の値を代入できる。&lt;br /&gt;
:let (x,y) = (1,2)&lt;br /&gt;
&lt;br /&gt;
= 算術演算子(Arithmetic Operators) =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operator !! Description&lt;br /&gt;
|-&lt;br /&gt;
| + || 加算&lt;br /&gt;
|-&lt;br /&gt;
| - || 減算&lt;br /&gt;
|-&lt;br /&gt;
| * || 乗算&lt;br /&gt;
|- &lt;br /&gt;
| / || 除算&lt;br /&gt;
|-&lt;br /&gt;
| % || 剰余&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 単項演算子 ==&lt;br /&gt;
&lt;br /&gt;
変数・定数に+ or - をつけることで、&lt;br /&gt;
&lt;br /&gt;
;+x, -x&lt;br /&gt;
:(+1)*x, (-1)*x&lt;br /&gt;
と同じ結果が得られる。+の演算の場合何もしないのと同じ&lt;br /&gt;
&lt;br /&gt;
= 複合代入演算子(Compund Assignment Operators) =&lt;br /&gt;
&lt;br /&gt;
演算子と代入をシンプルにした書き方。&lt;br /&gt;
&lt;br /&gt;
=の前に演算子を記載する。&lt;br /&gt;
&lt;br /&gt;
a+=1は、&lt;br /&gt;
&amp;lt;code&amp;gt;a=a+1&amp;lt;/code&amp;gt;と同じ。&lt;br /&gt;
&lt;br /&gt;
+は、文字列も結合可能&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operator !! Description&lt;br /&gt;
|-&lt;br /&gt;
| *= || 乗算と代入&lt;br /&gt;
|-&lt;br /&gt;
| /= || 除算代入&lt;br /&gt;
|-&lt;br /&gt;
| %= || 剰余と代入&lt;br /&gt;
|-&lt;br /&gt;
| += || 加算と代入&lt;br /&gt;
|-&lt;br /&gt;
| -= || 減算と代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;&amp;lt;= || 左ビットシフトと代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;&amp;gt;= || 右ビットシフトと代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;= || ビット単位の AND と代入&lt;br /&gt;
|-&lt;br /&gt;
| ` || =`&lt;br /&gt;
|-&lt;br /&gt;
| ^= || ビット単位の XOR と代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;*= || オーバーフローの乗算と代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;+= || オーバーフローの乗算と代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;-= || オーバーフローの減算と代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;lt;&amp;lt;= || オーバーフローを無視した左ビットシフトと代入&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;gt;&amp;gt;= || オーバフローを無視した右ビットシフトと代入&lt;br /&gt;
|-&lt;br /&gt;
| .&amp;amp;= || ポイント単位ビット単位のANDと代入&lt;br /&gt;
|-&lt;br /&gt;
| `. || =`&lt;br /&gt;
|-&lt;br /&gt;
| .^= || ポイント単位ビット単位のXORと代入&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 比較演算子(Comparison Operators) =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operator !! Description&lt;br /&gt;
|-&lt;br /&gt;
| == || 等しい&lt;br /&gt;
|-&lt;br /&gt;
| != || 等しくない&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt; || より大きい &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; || より小さい&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;= || 以上&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;= || 以下&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
tuppleでも比較可能。&lt;br /&gt;
 (1, &amp;quot;red&amp;quot;) &amp;lt; (2, &amp;quot;blue&amp;quot;)        // 一つ目を評価して trueになるので、二つ目は無視 &lt;br /&gt;
 (1, &amp;quot;red&amp;quot;) &amp;lt; (1, &amp;quot;bird&amp;quot;)        // 一つ目は同じなので、二つ目を評価し false となる&lt;br /&gt;
 (1, &amp;quot;red&amp;quot;) == (1, &amp;quot;red&amp;quot;)      // 一つ目、二つ目共に等しいので trueとなる&lt;br /&gt;
&lt;br /&gt;
= 三項演算子(Ternary Conditional Operator) =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
  if a&amp;gt;b { &lt;br /&gt;
    print(&amp;quot;big&amp;quot;)&lt;br /&gt;
  } else {&lt;br /&gt;
    print(&amp;quot;small&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
というのを&lt;br /&gt;
&amp;lt;code&amp;gt;print(a&amp;gt;b ? &amp;quot;big&amp;quot; : &amp;quot;small&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
というふうにシンプルにかける。&lt;br /&gt;
&lt;br /&gt;
= nil合体演算子(nil-Coalescing Operator) =&lt;br /&gt;
&lt;br /&gt;
変数が空かどうか判定して、初期値設定するときによく使う。&lt;br /&gt;
&lt;br /&gt;
例：testがnilの場合に ?? 以降が評価される&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
    var test:String?&lt;br /&gt;
    &lt;br /&gt;
    test = test ?? &amp;quot;デフォルト&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 範囲演算子(Range Operators) =&lt;br /&gt;
&lt;br /&gt;
for 文でloopさせる範囲を指定するとき等に使う。&lt;br /&gt;
&lt;br /&gt;
== 閉範囲演算子(Closed Range Operator) ==&lt;br /&gt;
開始と終了を指定する&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
  for index in 1...5 {&lt;br /&gt;
      print(&amp;quot;\(index)&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 半開範囲演算子(Half-Open Range Operator) ==&lt;br /&gt;
開始と終了を指定するのは変わらないが、終了値を含まない&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
var ar = [5,1,2,4,-1]&lt;br /&gt;
&lt;br /&gt;
for index in  0..&amp;lt;ar.count {&lt;br /&gt;
    print(&amp;quot;\(ar[index])&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 片側範囲演算子(One-Sided Ranges) ==&lt;br /&gt;
&lt;br /&gt;
開始もしくは、終了を指定しないやり方。&lt;br /&gt;
&lt;br /&gt;
index値以降最後まで&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
var ar = [5,1,2,4,-1]&lt;br /&gt;
&lt;br /&gt;
for index in  1... {&lt;br /&gt;
    print(&amp;quot;\(ar[index])&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最初からindex値まで&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
var ar = [5,1,2,4,-1]&lt;br /&gt;
&lt;br /&gt;
for index in  ...3 {&lt;br /&gt;
    print(&amp;quot;\(ar[index])&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最初からindex値より小さい値まで&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
var ar = [5,1,2,4,-1]&lt;br /&gt;
&lt;br /&gt;
for index in  ..&amp;lt;3 {&lt;br /&gt;
    print(&amp;quot;\(ar[index])&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 論理演算子(Logical Operators) =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operator !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;amp; || 論理積&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; || 論理和&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt; || 否定&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ビット演算子(Bitwise Operators) =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operator !! Description&lt;br /&gt;
|-&lt;br /&gt;
| ~ || 否定。全bitを0/1反転させる。変数の前につける&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;amp;&amp;lt;/nowiki&amp;gt; || bitの論理積&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; || bitの論理和&lt;br /&gt;
|-&lt;br /&gt;
| ^ || bitの排他的論理和&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ビット左右シフト演算子(Bitwise Left and Right Shift Operators) =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; a&amp;lt;&amp;lt;2 &amp;lt;/code&amp;gt; で2bit 左シフト、&amp;lt;code&amp;gt; a&amp;gt;&amp;gt;2 &amp;lt;/code&amp;gt; で2bit 右シフトになるが、SignedかUnsignedかで、挙動が変わる。Signedの場合は、単純にシフトするだけだが、Unsigned の場合は、最上位のSign bitを除いてシフトする。右シフトしたときは、ずらした上位ビットにSign bit と同じ値で埋める。&lt;br /&gt;
&lt;br /&gt;
= オーバフロー演算子(Overflow Operators) =&lt;br /&gt;
&lt;br /&gt;
変数の型の最大値を超えると通常オーバフローエラーとなるが、エラーにしないために使用する。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operator !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;amp;+&amp;lt;/nowiki&amp;gt; || オーバフロー加算&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;amp;-&amp;lt;/nowiki&amp;gt; || オーバフロー減算&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;amp;*&amp;lt;/nowiki&amp;gt; || オーバフロー積算&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
   var UInt8 a = 255&lt;br /&gt;
&lt;br /&gt;
   a = a + 1 // オーバーフローエラー&lt;br /&gt;
&lt;br /&gt;
   a = a &amp;amp;+ 1 //オーバーフローとならずにはみ出たビットは破棄される。この場合は、0 となる。&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 優先順位と結合規則(Precedence and Associativity) =&lt;br /&gt;
&lt;br /&gt;
大雑把で、下記のようになるが、細かく優先順位が決められているようだ。[https://zenn.dev/kyome/articles/48f551222b339c こちら]が詳しい。&lt;br /&gt;
:bit演算&amp;gt;乗除余算&amp;gt;比較演算&amp;gt;代入 &lt;br /&gt;
&lt;br /&gt;
= カスタム演算子 =&lt;br /&gt;
&lt;br /&gt;
演算子をオーバーロードによりカスタマイズすることができる。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Swift&amp;quot;&amp;gt;&lt;br /&gt;
    struct customS {&lt;br /&gt;
        var x = 0.0&lt;br /&gt;
        var s = &amp;quot;ab&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    extension customS {&lt;br /&gt;
        static func + (first: customS, second: customS) -&amp;gt; customS {&lt;br /&gt;
            return customS(x: first.x + first.x, s:first.s + second.s)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var c1 = customS(1.0, &amp;quot;abcde&amp;quot;);&lt;br /&gt;
    var c2 = customS(2.0, &amp;quot;fghi&amp;quot;);&lt;br /&gt;
    var c3  = c1+c2;  // c3 は、c3.x = 3.0, c3.s = &amp;quot;abcdefghi&amp;quot; となる&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External Link ==&lt;br /&gt;
* [https://www.swiftlangjp.com/language-guide/basic-operators.html Basic operators]&lt;br /&gt;
* [https://www.swiftlangjp.com/language-guide/advanced-operators.html Advanced operators]&lt;br /&gt;
* [https://zenn.dev/kyome/articles/48f551222b339c Swift: 演算子の定義について完全に理解した]&lt;br /&gt;
&lt;br /&gt;
[[Category:Swift|Operarator]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Fire</name></author>
	</entry>
</feed>