objects
withの合計を取得していて、object
この操作の関数がないため、エラーが発生しています。
任意の演算子 (+=
は演算子です) を使用するには、関数を宣言する必要があります。これらはグローバル関数です。これは、それらが動作するタイプ内に配置されないことを意味します。その下は大丈夫です。
これは、いくつかのプロパティを持つ単なる Type です。
class MyType {
var myInt : Int = 0
var myString : String = ""
var myFloat : Float = 0
init(int: Int, string: String, float: Float) {
myInt = int
myString = string
myFloat = float
}
}
これらはオペレーター用の関数です。
最初のものは単なる であり、
これが意味を持つすべてのプロパティをどのように組み合わせる必要があるか+
に注意して、の新しいインスタンスを返します。MyType
例として、私は の合計を取りませんでしたmyFloat
。他のプロパティのみを取りました。
func +(lhs:MyType,rhs:MyType) -> MyType {
let intSum = lhs.myInt + rhs.myInt
let stringSum = lhs.myString + rhs.myString
return MyType(int: intSum, string: stringSum,float: lhs.myFloat)
}
2 つ目はinout
、左側のインスタンス (lhs) を変更するために使用します。return
この機能にはありません。左側のインスタンスが更新されるため。
func +=(inout lhs:MyType, rhs:MyType) {
lhs.myInt += rhs.myInt
lhs.myString += rhs.myString
}
これらの関数が同じ Type の 2 つのパラメーターを想定していることに注目してください。objects
とが同じタイプでない場合(いずれかが andまたはobject
である可能性があると推測しています)、関連のない 2 つのタイプの合計を取る関数を作成する必要があります。Array
Dictionairy
これは別のタイプです
class MyOtherType {
var myDouble : Double = 0
}
この関数は、演算子を使用して、関連のない 2 つのタイプの合計を取得します。
func +(lhs:MyType,rhs:MyOtherType) -> MyType {
let floatSum = lhs.myFloat + Float(rhs.myDouble)
return MyType(int: lhs.myInt, string: lhs.myString, float: floatSum)
}
いくつかのテスト
演算子関数を記述しないと、次のようになります。
let alpha = MyType(int: 20, string: "hello ", float: 0.5)
let beta = MyType(int: 22, string: "world", float: 0.75)
let delta = alpha + beta // error: binary operator '+' cannot be applied to two 'MyType' operands
もしあなたがそうするなら:
let alpha = MyType(int: 20, string: "hello ", float: 0.5)
let beta = MyType(int: 22, string: "world", float: 0.75)
let delta = alpha + beta // 42, "hello world", 0.5
で合計を取る演算子関数を記述しない場合MyOtherType
:
let alpha = MyType(int: 20, string: "hello ", float: 0.5)
let beta = MyOtherType()
let delta = alpha + beta // error: binary operator '+' cannot be applied to operands of type 'MyType' and 'MyOtherType'
タイプと宣言の両方を質問に含めることが重要objects
ですobject
。また、次のようなエラー メッセージ全体を常にコピーしてください。
エラー: 二項演算子 '+' はタイプ 'MyType' および 'MyOtherType' のオペランドには適用できません
あなたobjects
のArray
合計関数が次のようになる場合:
func +=<T where T : _ArrayType>(inout lhs:T, rhs:T.Generator.Element) {
lhs.append(rhs)
}