【问题标题】:Converting between types in Objective-C在 Objective-C 中的类型之间转换
【发布时间】:2009-06-07 14:14:25
【问题描述】:

作为一名入门的 Objective-C 开发人员,没有耐心去实际做一些研究,而不仅仅是深入研究,我遇到了以下问题:

我有一个 CGFloat,我想将它除以某个东西,并将结果用作 NSInteger。

例子:

CGPoint p = scrollView.contentOffset; //where p is a CGFloat by nature
NSInteger * myIndex = p.x/468.0;

编译时出现错误:“初始化中的类型不兼容”。 我猜这是因为 CGFloat 和 NSInteger 之间的不匹配。

我应该知道什么才能摆脱这种情况?很抱歉打扰您。

【问题讨论】:

    标签: iphone floating-point integer type-conversion


    【解决方案1】:

    两个问题。您正在使用 NSInteger 指针 (NSInteger *myIndex)。你需要一个演员从浮点数到整数。像这样:

    NSInteger myIndex = (int)(p.x / 468.0);
    

    【讨论】:

    • 谢谢大卫!整个指针部分仍然让我有点害怕。到目前为止,我已经能够避免它,但我现在必须开始阅读 Kochan。
    • 我没有做过很多Objective C,但根据我有限的经验,你不必使用很多C风格的指针(使用*和像int这样的原始类型)。 Objective C 对象处理得非常好。
    【解决方案2】:

    NSInteger 不是实际的对象类型。它是原始整数类型的 typedef。删除 * 并且您的示例应该可以工作。就像现在一样,您正在尝试将数学结果分配为指针,并且您会收到该错误消息。

    【讨论】:

    • 我遇到了类似的麻烦,因为我认为 NSInteger 是 NSNumber 的子类。任何人都知道为什么在地球上有人创建了 NSInteger typedef(除了在新手中造成严重破坏、痛苦和混乱)????
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2014-02-13
    • 2013-05-08
    • 1970-01-01
    • 2021-12-06
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多