xcode报错Sending 'CGPoint' (aka 'struct CGPoint') to parameter of incompatible typ

47 阅读2分钟

xcode报错“Sending 'CGPoint' (aka 'struct CGPoint') to parameter of incompatible type 'id _Nonnull'”表明在代码中尝试将一个CGPoint类型的值传递给一个期望id _Nonnull类型的参数。这种类型不匹配会导致编译错误。

从证据中可以找到一些与CGPoint和id类型相关的使用示例,但没有直接提到将CGPoint传递给id类型的参数。不过,我们可以从我搜索到的资料中推断出如何解决这个问题。

可能的原因和解决方案

  1. 类型不匹配:CGPoint是一个结构体类型,而id是一个指向Objective-C对象的指针类型。因此,直接将CGPoint传递给期望id类型的参数会导致类型不匹配错误。
  2. 解决方案
  • 包装CGPoint:可以使用NSValue来包装CGPoint,使其成为Objective-C对象,从而可以传递给期望id类型的参数。
  • 修改函数签名:如果可能,修改函数签名以接受CGPoint类型的参数,而不是id类型。

示例代码

假设我们有一个函数期望接收一个id类型的参数,但我们需要传递一个CGPoint类型的值。我们可以使用NSValue来包装CGPoint:

- (void)someFunctionWithObject:(id _Nonnull)object {

// 函数实现

}

CGPoint point = CGPointMake(150, 150);

NSValue *pointValue = [NSValue valueWithCGPoint:point];

[someFunctionWithObject:pointValue];

在上述代码中,我们使用NSValue的类方法valueWithCGPoint:来创建一个包含CGPoint的NSValue对象,然后将其传递给期望id类型的参数。

参考证据

  • 提供了关于CGPoint结构体的详细信息,包括其定义和初始化方法。
  • 展示了如何在Masonry框架中处理CGPoint类型,并将其包装为NSValue对象。

通过上述方法,可以解决将CGPoint传递给期望id _Nonnull类型参数的问题。确保在代码中正确地进行类型转换和包装,以避免编译错误。