我在 Header 里面定义了一个 Struct 资料类型, 然后直接就在 Header 里面声明某个函数的传回物件是这种资料类型。 结果 Xcode 靠北说「 expected a type 」。
我不知道我哪里有搞错。
1
DianQK 2022-04-17 22:37:10 +08:00 via Android
用 typedef 定义 struct ,或者底下的函数签名改为 `struct XX` 试试
|
2
DianQK 2022-04-17 22:38:39 +08:00 via Android 1
大概长这样
typedef struct S { int x; } S; 或者 -(struct BufferStateChange)xxx; |
3
Building 2022-04-17 23:35:49 +08:00
OC 还没有这么强大能在 struct 里面用对象吧,struct 只能用值类型和指针
|
5
AlphaRobert 2022-04-18 01:21:38 +08:00 3
这并不是棘手 Objective-C 的问题,而是基础的 C 问题。
如果你只用 `struct SomeType {...};` 定义结构体,那么你在表示该结构体类型时必须写为 `struct SomeType`,除非你定义时写 `typedef SomeType Type {...} SomeType;`。 |
6
ysc3839 2022-04-18 01:32:31 +08:00
@AlphaRobert 顺带一提,C++则不需要写完整的 struct SomeType ,可以直接用 SomeType
|
7
AlphaRobert 2022-04-18 01:49:41 +08:00
@AlphaRobert #5:`typedef SomeType {...} SomeType;` 里多打了个 `Type`,应该是
@ysc3839 #6:不过默认也不会用 Objective-C++ |
8
ShikiSuen OP @AlphaRobert 感谢指点迷津。
我换了个更稳妥的方法来绕过了这个问题。 我直接将原先的函数写成 ObjC++ 过程、将结果写入 objc 模组内的三个本地变数当中。 这三个本地变数都有对应的取值函数。 然后 Swift 那边先触发过程、再用取值函数取回数值。 于是威注音输入法的 KeyHandler 的 Swift 化圆满完成。 重写之前: KeyHandler.mm 1691 行。 重写之后: KeyHandler.mm 605 行,仅包含只能由 ObjC++ 完成的部分; KeyHandler_HandleInput.swift 400 行。 KeyHandler_HandleCandidate.swift 303 行。 KeyHandler_Misc.swift 22 行。 KeyHandler_States.swift 509 行。 |
9
ShikiSuen OP |
10
shawndev 2022-04-18 09:53:26 +08:00
基础的 C 问题,类型是 struct SomeType ,而不是 SomeType ,一般的做法是 typedef struct SomeType {...} SomeType_t, *p_SomeType_t 。
|
11
liuidetmks 2022-04-18 11:45:14 +08:00
还有人跳坑 oc? 看帖子, 我认为原生开发的末日已经来了
|
12
xing7673 2022-04-20 11:31:37 +08:00 via iPhone
@liuidetmks 不学 oc 的话和 c++ interop 只能用 c 来 wrap 了。
|
13
xing7673 2022-04-20 11:44:28 +08:00 via iPhone
@liuidetmks 不过刚去刷了一下,interop 进展还可以,未来应该不用学 oc 了。
|