質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

3回答

2017閲覧

swift ハイフン

a_ishida_mm

総合スコア8

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/06/15 16:19

swiftで下記のコードがエラーにならないのはなぜでしょうか。

  • (ハイフン)は関数名なんでしょうか
// make Arrays substractable func - (left: Array<CGFloat>, right: Array<CGFloat>) -> Array<CGFloat> { var result: Array<CGFloat> = [] for index in 0..<left.count { var difference = left[index] - right[index] result.append(difference) } return result }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Array<CGFloat> に 演算子を定義するなら、こんな風にするとよいです。
参考情報:

![イメージ説明]WIDTH:600

lang

1infix operator - {} 2func - (left: Array<CGFloat>, right: Array<CGFloat>) -> Array<CGFloat> { 3 var diffs : Array<CGFloat> = [] 4 for index in 0..<left.count { 5 var difference = left[index] - right[index] 6 diffs.append(difference) 7 } 8 return diffs 9} 10 11let a1 : Array<CGFloat> = [1.0, 2.0, 3.0] 12let a2 : Array<CGFloat> = [10.0, 20.0, 30.0] 13 14var d = a1 - a2

投稿2015/06/16 13:58

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

> ... エラーにならないのはなぜ ...
どこで、どんなエラーが出ると考えたのでしょうか?

func - ... として "-" という名前の関数を定義しようとしてますが、
playgrounde で以下を試すと -(left, right) での関数呼び出しはエラーになります。

lang

1mport UIKit 2 3func -(left: Array<CGFloat>, right: Array<CGFloat>) -> Array<CGFloat> { 4 var result: Array<CGFloat> = [] 5 for index in 0..<left.count { 6 var difference = left[index] - right[index] 7 result.append(difference) 8 } 9 return result 10} 11 12let left : Array<CGFloat> = [1.0, 2.0] 13let right : Array<CGFloat> = [1.0, 3.0] 14var diff = -(left, right)

![イメージ説明]WIDTH:600
func diffs(....)
とすれば、
diffs(left, right) の呼び出しはできます。
![イメージ説明]WIDTH:600

関数の名前も問題がありそうですが、関数の中身についても問題がありそうです。
left の配列の数より right の配列の数が少ないと
left[index] - right[index] の部分で
right[index] の要素が配列の範囲外のアクセスのエラーになると思います。

演算子を自分で定義したいなら、それなりの書き方が必要です。
参考: Swiftで新しい演算子を定義する http://qiita.com/Ushio@github/items/3c782b0d38bf3d11fe29

投稿2015/06/15 22:19

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2015/06/16 10:17

関数じゃなくて演算子なのですから、「var diff = -(left, right)」と書いたら文法エラーになるのは当たり前です。「var diff = left - right」と書きます。
guest

0

ハイフンは「引き算」の演算子です。
そのコードは、配列どうしの引き算を定義しています。

投稿2015/06/15 16:22

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問