落書きノート

ふと自分が気になった事を書いてます

SwiftとObjective-Cを比較しながら、Cocoa + WebKitタブブラウザを作ってみた。

どういうわけか、デスクトップアプリケーションの記事が少ないような気がする。人気ないのだろうか…。自分のブログで掲載していたネタを投稿してみる。

#import "ViewController.h"
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
 
    // Do any additional setup after loading the view.
    self.webBrowser = [[NSMutableArray alloc] init];
    self.tabPages = [[NSMutableArray alloc] init];
 
    NSString *urlText = @"http://www.yahoo.co.jp";
    [self.textField setStringValue: urlText];
 
    WebView *browser = [self getNewBrowser];
 
    [self.webBrowser addObject:browser];
    [self.tabPages addObject:[self about_blank]];
 
    self.about_blank.view = browser;
 
    [[self.getCurrentWebBrowser mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[self.textField stringValue]]]];
}
 
- (void)setRepresentedObject:(id)representedObject {
    [super setRepresentedObject:representedObject];
 
    // Update the view, if already loaded.
}
 
- (IBAction)connectURL:(id)sender {
    [[self.getCurrentWebBrowser mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[sender stringValue]]]];
    [self.getTabItem setLabel:[self.getCurrentWebBrowser mainFrameTitle]];
}
- (IBAction)newTabs:(id)sender {
    WebView *browser = [self getNewBrowser];
    NSTabViewItem *tabItem = [self getNewTabItem];
 
    [self.webBrowser addObject:browser];
    [self.tabPages addObject:tabItem];
 
    tabItem.view = browser;
    [self.tabView addTabViewItem:tabItem];
}
 
- (WebView *)getNewBrowser {
    return [[WebView alloc] init];
}
 
- (NSTabViewItem *)getNewTabItem {
    return [[NSTabViewItem alloc] init];
}
 
- (NSTabViewItem *)getTabItem {
    return self.tabView.selectedTabViewItem;
}
 
- (NSInteger)getTabItemNumber {
    NSInteger index = 0;
 
    for (NSInteger i = 0; i < self.tabPages.count; i++) {
        if([self.tabPages[i] isEqual:self.getTabItem]){
            index = i;
        }
    }
 
    return index;
}
 
- (WebView *)getCurrentWebBrowser {
    return self.webBrowser[self.getTabItemNumber];
}
@end

続いてSwiftのコード。

import Cocoa
import WebKit
 
class ViewController: NSViewController {
 
    @IBOutlet weak var textField: NSTextField!
    @IBOutlet weak var tabView: NSTabView!
    @IBOutlet weak var about_blank: NSTabViewItem!
 
    var webBrowser = Array <WebView>()
    var tabPages = Array <NSTabViewItem>()
 
    override func viewDidLoad() {
        super.viewDidLoad()
 
        // Do any additional setup after loading the view.
 
        var urlText = "http://www.yahoo.co.jp"
        self.textField.stringValue = urlText
 
        var url = NSURL(string: urlText)
        var req = NSURLRequest(URL: url!)
 
        var browser = getNewBrowser()
 
        self.webBrowser.append(browser)
        self.tabPages.append(self.about_blank)
 
        self.about_blank.view = browser
 
        self.getCurrentWebBrowser().mainFrame.loadRequest(req)
    }
 
    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }
 
 
    @IBAction func connectURL(sender: AnyObject) {
        var url = NSURL(string: sender.stringValue)
        var req = NSURLRequest(URL: url!)
 
        self.getCurrentWebBrowser().mainFrame.loadRequest(req)
 
        self.getTabItem().label = self.getCurrentWebBrowser().mainFrameTitle
    }
 
    @IBAction func newTabs(sender: AnyObject) {
        var browser = getNewBrowser()
        var tabItem = getNewTabItem()
 
        self.webBrowser.append(browser)
        self.tabPages.append(tabItem)
 
        tabItem.view = browser
        self.tabView.addTabViewItem(tabItem)
    }
 
    func getNewBrowser() -> WebView {
        return WebView()
    }
 
    func getNewTabItem() -> NSTabViewItem {
        return NSTabViewItem()
    }
 
    func getTabItem() -> NSTabViewItem {
        return self.tabView.selectedTabViewItem!
    }
 
    func getTabItemNumber() -> Int {
        var index = 0
 
        for var i = 0; i < tabPages.count; i++ {
            if(self.tabPages[i] == getTabItem()){
                index = i
            }
        }
 
        return index
    }
 
    func getCurrentWebBrowser() -> WebView {
        return webBrowser[getTabItemNumber()]
    }
}

これらのコードを使ってビルドした結果がこちら。

8d184bf7-428a-4979-446f-09e392321900