Ios 如何在swift中转换java代码?
我这里的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
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中对它们的调用)。我认为这是一个编译器错误。还要更仔细地阅读有关分段错误的日志-它可能会告诉您是哪个声明导致了问题。