Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中转换java代码?_Ios_Swift - Fatal编程技术网

Ios 如何在swift中转换java代码?

Ios 如何在swift中转换java代码?,ios,swift,Ios,Swift,我这里的java代码如下所示: this.mNetworkConnectionManager = new NetworkConnectionManager(new NetworkConnectionManager.OnNetworkListener() { @Override public void onNetworkPacketSent(String packet) { BASPacket bp = new BA

我这里的java代码如下所示:

this.mNetworkConnectionManager = new NetworkConnectionManager(new NetworkConnectionManager.OnNetworkListener() {

            @Override
            public void onNetworkPacketSent(String packet) {
                BASPacket bp = new BASPacket(packet);
                bp.setTimestampedPacket(timestampPacket(packet, "sent"));

                mOnBASMessageListener.onBASMessageSent(bp);
            }


        });
self.mNetworkConnectionManager = NetworkConnectionManager(l: { NetworkConnectionManager.OnNetworkListener() 
            func onNetworkPacketSent(packet : String)
            {
                var bp : BASPacket = BASPacket(packet: packet)
                bp.setTimestampedPacket(timestampPacket(packet, sentrec: "sent"));

                mOnBASMessageListener.onBASMessageSent(bp);
            }
        }())
我尝试在swift中转换这些代码,如下所示:

this.mNetworkConnectionManager = new NetworkConnectionManager(new NetworkConnectionManager.OnNetworkListener() {

            @Override
            public void onNetworkPacketSent(String packet) {
                BASPacket bp = new BASPacket(packet);
                bp.setTimestampedPacket(timestampPacket(packet, "sent"));

                mOnBASMessageListener.onBASMessageSent(bp);
            }


        });
self.mNetworkConnectionManager = NetworkConnectionManager(l: { NetworkConnectionManager.OnNetworkListener() 
            func onNetworkPacketSent(packet : String)
            {
                var bp : BASPacket = BASPacket(packet: packet)
                bp.setTimestampedPacket(timestampPacket(packet, sentrec: "sent"));

                mOnBASMessageListener.onBASMessageSent(bp);
            }
        }())
但获取编译错误。“由于信号:分段错误:11,命令失败”

此外,我在swift中有如下NetworkManager类:

public class NetworkConnectionManager
{
    var mOnNetworkListener:OnNetworkListener = OnNetworkListener()

     init(l : OnNetworkListener)
    {
        self.mOnNetworkListener = l

    }
    class OnNetworkListener
    {

    }
}

Swift不支持匿名类。如果要重写类中的某个内容,必须在swift中为其创建一个子类

public class NetworkConnectionManager
{
    var mOnNetworkListener:OnNetworkListener = OnNetworkListener()

    init(l : OnNetworkListener)
    {
        self.mOnNetworkListener = l

    }
    class OnNetworkListener
    {
        func onNetworkPacketSent(packet : String)
        {
            //default implementation
        }
    }
}

class MyOnNetworkListener : NetworkConnectionManager.OnNetworkListener
{
    override func onNetworkPacketSent(packet: String) {
        var bp : BASPacket = BASPacket(packet: packet)
        bp.setTimestampedPacket(timestampPacket(packet, sentrec: "sent"));

        mOnBASMessageListener.onBASMessageSent(bp);
    }
}

let mNetworkConnectionManager = MyOnNetworkListener()
如果没有默认实现,可以将其声明为协议

public class NetworkConnectionManager
{
    var mOnNetworkListener:OnNetworkListener

    init(l : OnNetworkListener)
    {
        self.mOnNetworkListener = l
    }
}

protocol OnNetworkListener {
    func onNetworkPacketSent(packet : String)
}

class MyOnNetworkListener : OnNetworkListener
{
    func onNetworkPacketSent(packet: String) {
        var bp : BASPacket = BASPacket(packet: packet)
        bp.setTimestampedPacket(timestampPacket(packet, sentrec: "sent"));

        mOnBASMessageListener.onBASMessageSent(bp);
    }
}

let mNetworkConnectionManager = MyOnNetworkListener()
如果类/协议只包含一个方法,则更快的方法是通过单个闭包

public class NetworkConnectionManager
{
    var mOnNetworkListener : (String) -> ()

    init(l : @escaping (String) -> ())
    {
        self.mOnNetworkListener = l

    }
}

let mNetworkConnectionManager = NetworkConnectionManager { (packet) in
    var bp : BASPacket = BASPacket(packet: packet)
    bp.setTimestampedPacket(timestampPacket(packet, sentrec: "sent"));

    mOnBASMessageListener.onBASMessageSent(bp);
}

编译器永远不会崩溃,因此这是一个bug。但NetworkConnectionManager和其他使用的类在您的Swift代码中来自何处?NetworkConnectionManager和其他使用的类在应用程序中也是Swift类。如果您知道转换上述java代码的其他方法,请告诉我。如果您注释掉onNetworkPacketSent函数中的内容,它会编译吗?我遇到了这个分段错误:11每当我试图访问这些匿名内部类中的方法中的局部/方法/实例变量时,或者无论您如何在Swift中调用它们(这就是java中对它们的调用)。我认为这是一个编译器错误。还要更仔细地阅读有关分段错误的日志-它可能会告诉您是哪个声明导致了问题。