V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zhicheng
V2EX  ›  分享创造

写了一个 Lemon 语言到 Objective-C 的绑定,可以用 Lemon 语言写 Mac 和 iOS 了。

  •  
  •   zhicheng · 2017-10-25 18:45:25 +08:00 · 1798 次点击
    这是一个创建于 2623 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下面的代码示例

    import 'lobjc.so' as objc;
    
    var NSObject = objc.NSClassFromString('NSObject');
    var NSColor = objc.NSClassFromString('NSColor');
    var NSWindow = objc.NSClassFromString('NSWindow');
    var NSWindowController = objc.NSClassFromString('NSWindowController');
    var NSApplication = objc.NSClassFromString('NSApplication');
    
    @objc.protocol('NSWindowDelegate')
    class WindowDelegate(NSObject) {
            def windowDidResize_(var n) {
            }
    }
    
    class WindowController(NSWindowController) {
    }
    
    @objc.protocol('NSApplicationDelegate')
    class AppDelegate(NSObject) {
            def applicationDidFinishLaunching_(var aNotification) {
                    self.window = NSWindow(
                            contentRect = objc.CGRectMake(10, 10, 800, 600),
                            styleMask = objc.NSWindowStyleMaskMiniaturizable |
                                            objc.NSWindowStyleMaskTitled |
                                            objc.NSWindowStyleMaskClosable |
                                            objc.NSWindowStyleMaskResizable,
                            backing = objc.NSBackingStoreBuffered,
                            defer = false);
    
                    self.window.setTitle_("Hello,World!");
                    self.windowDelegate = WindowDelegate();
                    self.window.setDelegate_(self.windowDelegate);
                    self.window.setBackgroundColor_(NSColor.whiteColor());
                    self.windowController = WindowController(window=self.window);
                    self.windowController.showWindow_(self);
    
                    self.windowController.showWindow_(self.windowController);
            }
    
            def applicationShouldTerminateAfterLastWindowClosed_(var app) {
                    return true;
            }
    }
    
    var delegate = AppDelegate();
    var app = NSApplication.sharedApplication();
    app.setDelegate_(delegate);
    app.run();
    

    更多例子可以看代码里的 example 目录。目前只有 2000 多行代码,欢迎大家帮忙测试和改进。

    第 1 条附言  ·  2017-10-26 17:04:09 +08:00
    傻逼了,光想着写个代理示例忘发地址了,地址在此

    https://github.com/zhicheng/lobjc
    5 条回复    2017-10-26 17:03:33 +08:00
    noli
        1
    noli  
       2017-10-25 18:55:12 +08:00
    精神可嘉,送你一波铜币,聊表敬意。
    期待 有 lemon lang 的详细 tutorial 以及 feature
    xiubin
        2
    xiubin  
       2017-10-26 10:14:36 +08:00
    示例代码在哪里。。
    forestyuan
        3
    forestyuan  
       2017-10-26 10:26:19 +08:00
    开源吗?
    pheyer
        4
    pheyer  
       2017-10-26 14:31:47 +08:00
    怎么调试?
    zhicheng
        5
    zhicheng  
    OP
       2017-10-26 17:03:33 +08:00
    傻逼了,光想着写个代理示例忘发地址了,地址在此

    https://github.com/zhicheng/lobjc

    @forestyuan 是开源的。
    @pheyer 暂没有调试的机制。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2207 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:11 · PVG 00:11 · LAX 08:11 · JFK 11:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.