我试图弄清楚如何在Swift中复制一个示例Java公共接口。这就是我想出的。
以下是Java公共接口示例:
public interface TestInterface {
public static int MSG_1 = 0x11;
public static int MSG_2 = 0x22;
public static int MSG_3 = 0x33;
public int getMessageType();
}
然后在新类中它将实现TestInterface,例如:
import com.myTestApp.TestInterface;
public class msg1Type implements TestInterface {
public int getMessageType() {
return MSG_1;
}
}
在Swift中,我完成了以下操作 - 添加了一个名为TestInterface.swif的文件:
import Foundation
class TestInterface {
let MSG_1 :Int = 0x11
let MSG_2 :Int = 0x22
let MSG_3 :Int = 0x33
let getMessageType((void)->Int)
}
然后在实现TestInterface的类中,getMessageType()函数如:
import Foundation
class msg1Type : TestInterface {
func getMessageType() -> Int {
return MSG_1;
}
}
接近此实验的最佳方法是什么?
答案 0 :(得分:2)
您要找的是protocols。
enum MessageType: Int {
case MSG_1 = 0x11,
case MSG_2 = 0x22,
case MSG_3 = 0x33
}
protocol TestProtocol {
func getMessageType() -> MessageType
}
可以这样实现:
class Msg1Type: TestProtocol {
func getMessageType() -> MessageType {
return MSG_1
}
}
不要试图盲目地将概念从Java转换为其他语言,尽可能尝试从头开始学习Swift,
答案 1 :(得分:1)
我想我可以看到你想做什么。
- >它有点像你在寻找抽象类(例如在C ++中),但在是否使用其他东西之间存在一些混淆,例如' Protocols' (与Java'接口'相反)。
,而不是...
我建议稍微简化一下解决方案:
使用默认方法创建一个类,然后在子类中重写
首先使用消息常量和默认方法
创建超类class TestInterface
{
let MSG_1:Byte = 0x11;
let MSG_2:Byte = 0x22;
let MSG_3:Byte = 0x33;
func getMessageType () -> Byte
{
return 0
}
}
然后你可以扩展Super-Class并覆盖MessageType方法
class SecondInterface : TestInterface
{
override func getMessageType () -> Byte
{
return MSG_2
}
}
(我个人认为进行跨语言实验是一种很好的做法)
答案 2 :(得分:0)
我完全赞同哑光。
class TestInterface {
let MSG_1 :Int = 0x11
let MSG_2 :Int = 0x22
let MSG_3 :Int = 0x33
func getMessageType () ->Int {
return MSG_1
}
}