如何参考Swift Playground本身?

use*_*291 10 swift swift-playground

如何以编程方式创建按钮?

自我在快速游乐场不起作用:

button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
Run Code Online (Sandbox Code Playgroud)

错误:

游乐场执行失败:错误:: 42:13:错误:使用未解析的标识符'self'

我也尝试用里面的buttonAction方法创建一个类,但是当我点击按钮时,没有任何东西在控制台中打印

import UIKit

class myself {


    func buttonAction(sender:UIButton!)
    {
        println("Button tapped")
    }

}

var s = myself()

// Create View
var f = CGRect(x:0,y:0,width:200,height:200)
var view = UIView(frame:f)


// Create Button
var b = UIButton(frame: f)
b.setTitle("Hello", forState: UIControlState.Normal)
b.addTarget(s, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

view.addSubview(b)

view
Run Code Online (Sandbox Code Playgroud)

Ber*_*ter 7

不幸的是,游乐场中的控件不是交互式的.

我试图通过创建和显示NSWindow一个Mac游乐场来解决游乐场控制的非交互性问题,但结果是窗口只是在操场后面闪过.

我可以一些探讨后告诉最佳NSProcess,NSBundle,NSApplication并观看了系统活动监视器,操场实际上编译你的代码,将其加载到一个存根应用程序,执行,操场上捕获的结果,并显示他们,那么存根应用程序退出或等待各地为下一次执行.这意味着当您看到结果时,代码不再执行.

如果你很好奇,可以在游乐场试试下面的代码,看看我的意思.如果打开活动监视器并过滤,则PlaygroundStub_OSX可以看到运行代码启动的过程.它经常处于"无响应"状态.我还包括了代码探测部分结果的屏幕截图.

import Cocoa

var app = NSApplication.sharedApplication()
app.hidden

var procInfo = NSProcessInfo.processInfo()
procInfo.processName
procInfo.arguments

var bundle = NSBundle.mainBundle()
bundle.bundlePath



var window = NSWindow(contentRect: NSRect(x: 30, y: 30, width: 400, height: 400), styleMask: NSTitledWindowMask, backing: .Buffered, defer: false)


var view = NSView(frame: NSRect(x: 0, y: 0, width: 300, height: 300))

var textField = NSTextField(frame: NSRect(x: 30, y: 30, width: 100, height: 20))

textField.stringValue = "Test"

view.addSubview(textField)

var button = NSButton(frame: NSRect(x: 30, y: 60, width: 100, height: 30))

button.highlight(true)

var buttonCell:NSButtonCell = button.cell() as NSButtonCell
buttonCell.bezelStyle = NSBezelStyle.RoundedBezelStyle


view.addSubview(button)

window.contentView.addSubview(view)



window.makeKeyAndOrderFront(nil)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

UPDATE

我能够在Swift游乐场中获得一个半功能的OS X窗口,并将代码放在一个github仓库中.我不确定基于UIKit的交互式视图是否可行.


小智 7

使用Xcode 7.3,现在支持此功能.您需要声明一个ObjectiveC对象或使用@objc关键字作为目标公开一个函数:

class Responder : NSObject {
    func action() {
        print("Button pressed!")
    }
}

let containerView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 375.0, height: 667.0))
XCPlaygroundPage.currentPage.liveView = containerView
let responder = Responder()

let button = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
button.backgroundColor = UIColor.greenColor()
button.setTitle("TEST", forState: .Normal)
button.addTarget(responder, action: #selector(Responder.action), forControlEvents: .TouchUpInside)
containerView.addSubview(button)
Run Code Online (Sandbox Code Playgroud)