你会如何在Swift中复制这个Java公共接口?

时间:2014-12-07 00:09:59

标签: java swift

我试图弄清楚如何在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;
        }
}

接近此实验的最佳方法是什么?

3 个答案:

答案 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
    }
}