二元运算符 += 不能应用于该类型的操作数
Binary operator += cannot be applied to operands of the type
我有这个错误:
Binary operator += cannot be applied to operands of the type.
我该如何解决?
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "item" {
inItem = false
objects += object
}
}
我在 objects += object
行有这个错误
您收到一个错误,因为您正在计算 objects
与 object
的总和,并且此操作没有函数。
要使用任何运算符(+=
是运算符),您需要为其声明函数。这些是全局函数。这意味着它们不会被放入它们所处理的类型中。在下就好了
这只是一个具有一些属性的类型。
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
}
}
这些是操作员的功能。
第一个只是 +
,它 returns 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)
}
第二个使用 inout
改变左侧实例 (lhs)。这个函数里没有return
。由于左侧实例已更新。
func +=(inout lhs:MyType, rhs:MyType) {
lhs.myInt += rhs.myInt
lhs.myString += rhs.myString
}
注意这些函数如何期望两个相同类型的参数。如果 objects
和 object
不是同一类型(我猜一个可能是 Array
或 Dictionairy
)那么你需要创建一个函数来计算两个不相关的类型。
这是另一种类型
class MyOtherType {
var myDouble : Double = 0
}
此函数使用运算符对两个不相关的类型求和
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)
}
我有这个错误:
Binary operator += cannot be applied to operands of the type.
我该如何解决?
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "item" {
inItem = false
objects += object
}
}
我在 objects += object
您收到一个错误,因为您正在计算 objects
与 object
的总和,并且此操作没有函数。
要使用任何运算符(+=
是运算符),您需要为其声明函数。这些是全局函数。这意味着它们不会被放入它们所处理的类型中。在下就好了
这只是一个具有一些属性的类型。
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
}
}
这些是操作员的功能。
第一个只是 +
,它 returns 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)
}
第二个使用 inout
改变左侧实例 (lhs)。这个函数里没有return
。由于左侧实例已更新。
func +=(inout lhs:MyType, rhs:MyType) {
lhs.myInt += rhs.myInt
lhs.myString += rhs.myString
}
注意这些函数如何期望两个相同类型的参数。如果 objects
和 object
不是同一类型(我猜一个可能是 Array
或 Dictionairy
)那么你需要创建一个函数来计算两个不相关的类型。
这是另一种类型
class MyOtherType {
var myDouble : Double = 0
}
此函数使用运算符对两个不相关的类型求和
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)
}