Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reference Swift Playground itself?

from How to create a button programmatically?

self doesn't work in swift playground :

button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

error :

Playground execution failed: error: :42:13: error: use of unresolved identifier 'self'

I also tried to create a class with buttonAction method inside it compiles but when I click on the button nothing prints in console

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
like image 565
user310291 Avatar asked Jun 08 '14 16:06

user310291


People also ask

What is subscription URL in Swift Playgrounds?

Publish Your Subscription on the Web The Swift Playgrounds universal link prefix: https://developer.apple.com/ul/sp0?url= . The URL for your subscription's JSON feed; for example: https://example.com/whimsical-swift/feed.json .

What is swift playground book?

Apple's Swift Playgrounds is an app available for iPad that makes learning the Swift programming language fun and exciting with code through a collection of digital books called "Playground Books" that are available for download. Playground books are split into chapters, which are further divided into pages.

What is the difference between Swift playground and Xcode?

One of the biggest differences between Swift Playgrounds and Xcode Playgrounds is that Swift Playgrounds are much less powerful and are built more as an educational tool. My biggest fear is that as Apple brings Swift Playgrounds to the Mac that they will stop supporting and growing Xcode Playgrounds.


1 Answers

Unfortunately, controls in playgrounds are not interactive.

I tried getting around the non-interactivity of playground controls the other day by creating and displaying an NSWindow for a Mac playground, however, the result was that the window simply flashed behind the playground.

Best that I can tell after some probing into NSProcess, NSBundle, NSApplication and watching the system Activity Monitor, the playground actually compiles your code, loads it into a stub app, executes, the playground captures the results and displays them then the stub app exits or waits around for the next execution. This means by the time you see the results, the code is no longer executing.

If you're curious, you can try the code below in a playground to see what I mean. If you open Activity Monitor and filter on PlaygroundStub_OSX you can see the process that runs the code launch. It is oftentimes in a "Not responding" state. I've also included a screen capture of the results of the probing portion of the code.

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)

enter image description here

UPDATE

I was able to get a semi-functional OS X window in a Swift playground and placed the code in a github repo. I'm not sure if an interactive UIKit based view is possible yet.

like image 131
BergQuester Avatar answered Nov 02 '22 08:11

BergQuester