Does swift playground support UIKit? - uikit

I tried to create a UILabel in playground but failed. Does playground only support OS X development for now?

YES, it does!
File: New > File... > iOS > Source > Playground
import UIKit
let lbl = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 100))
lbl.text = "Hello StackOverflow!"
Then, save the file. (Or manually run it.) This will trigger the Playground to interpret UI related things. At this point, the word "UILabel" should appear on the right-hand side.
Now, to actually view what you've done, you've got to click on the "Quick View" eye on the right, or the white circle to open it in Assistant Editor:
Here's a screenshot of some basic things with UIImage working, etc.
(EDIT: minor text update to current CGRect syntax -- But, screenshots still show old syntax.)

Edited#2014-11-13: It seems the new xcode 6 had fixed this.
NO, It doesn't. But it's worth noting that you can import UIKit.
If you want to import UIKit you cound follow this:
View -> Utilities -> Show File Inspector (opt + cmd + 1)
On the right side of Xcode Change “Playground Settings -> Platform” from OS X to iOS
then you could import UIKit or some module for iOS
ps. I try to create a UIImageView but it doesn't show the correct image on the right side. It seem worthless to import UIKit

In Xcode 7, now you can't use the Quick Look to see the appearance of a UIView.
Instead, use the Assistant Editor and:
XCPlaygroundPage.currentPage.liveView = sampleView
Like this:
import XCPlayground
import UIKit
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
// Simulate User Interaction, not available in Xcode 7.2
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
let color = UIColor(red: 1, green: 1, blue: 0, alpha: 1)
let leftMargin = 20
let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 667)) // iPhone 6 proportions
view.backgroundColor = UIColor.grayColor()
// LABEL
let label = UILabel(frame: CGRect(x: leftMargin, y: 5, width: 300, height: 44))
label.text = "Hello, playground"
label.textColor = UIColor.whiteColor()
view.addSubview(label)
// TEXTFIELD
let textField = UITextField(frame: CGRect(x: leftMargin, y: 60, width: 300, height: 44))
textField.placeholder = "Edit me…"
textField.backgroundColor = UIColor(white: 1, alpha: 0.5)
textField.textColor = UIColor.whiteColor()
textField.userInteractionEnabled = true
view.addSubview(textField)
XCPlaygroundPage.currentPage.liveView = view
delay(1.0) { () -> () in
textField.text = "New text!"
}

In Xcode 8 XCPlaygroundPage.currentPage.liveView is deprecated. Instead, use
import PlaygroundSupport
PlaygroundPage.current.liveView = view

Press CMD+Option+1 and change the platform to iOS, this will allow you to import UIKit.

I found I could add a new playground file in IOS project, and in that file I can import UIKit.

please use Command (⌘) + Option(⌥) + 1 combination to switch to iOS platform from OSX in playground to use UIKit .

Most simple solution:
Xcode 9.2
Start with a new Single View playground:
show Assistance Editor: View -> Assistance Editor -> Show Assistance Editor.
here you go. By default you will see printed property: label.text = "Hello World!" in the Live View window

Press Option+Cmd+1 and choose iOS in the Platform setting. Then you can import UIKit and play~

Yeah looks like it doesn't support UIkit yet.
Update:
When i wrote this answer in 2014 it didn't support UIKit, now it does. Leaving this for historical reference
Edit:
Actually above answer is incorrect.
You can create iOS project and add new .playground file inside that project. Then you can import Uikit or another iOS specific framework.

Related

How to center my Playgrounds Live View

I am instantiating a playground live view using the following code:
import UIKit
import PlaygroundSupport
let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
view.backgroundColor = .white
PlaygroundPage.current.liveView = view
The live view that appears is stuck to the top of the screen and I can't change it's location by changing the x and y values of the frame. How do I get the view to move/center on my screen?
Photo of how it comes out:

How to get a Canvas in a Swift Playground

I would like to get a canvas that I can use to draw on. The target would be an iOS based Swift playground. I searched the documentation and I could not found an object named Canvas, but if there is something similar to it then it would be good for me as well.
You can use something similar to this, note you don't have to use Sprite Kit classes.
import UIKit
import PlaygroundSupport
import SpriteKit
// Playground Container Setup
//
//
let containerWidth: CGFloat = 667.0
let containerHeight: CGFloat = 375.0
let containerCenter: CGPoint = CGPoint(x: (containerWidth/2), y: (containerHeight/2))
let containerView = SKView(frame: CGRect(x: 0.0, y: 0.0, width: containerWidth, height: containerHeight))
PlaygroundPage.current.liveView = containerView
let containterScene: SKScene = SKScene(size: CGSize(width: containerWidth, height: containerHeight))
containerView.presentScene(containterScene)
UPDATED
I've created a wrapper class to make this easier for everyone. Download the Playground here on github

Unable to load a scene in a playground with XCode 7 beta 3

I'm unable to load a scene in XCode 7 beta 3 playground... although it was working with Xcode 6.4.... is it bug or something as changed ?
ps : SCNScene(named: "ship.dae") returns nil.
In my Resources folder is ship.dae and texture.png (from the SceneKit template), and here is my code :
//: Playground - noun: a place where people can play
import SceneKit
import XCPlayground
var view = SCNView(frame: NSRect(x: 0, y: 0, width: 500, height: 500))
var scene = SCNScene(named: "ship.dae")
view.scene = scene
XCPShowView("view", view: view)
In Xcode 7
import XCPlayground
let view = // your view
XCPlaygroundPage.currentPage.liveView = view
In Xcode 8
import PlaygroundSupport
let view = // your view
PlaygroundPage.current.liveView = view

Drawing a colored rectangle in a macOS app (Swift)

Just started to learn Swift. I’ve created a macOS app project using the Xcode 6 Beta 6. Now I want to use the ViewController.swift to draw a colored rectangle (for testing purposes) in the apps main view (a NSWindow within the Main.storyboard).
I’ve tried this:
override func viewDidLoad() {
let myRect = NSView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
myRect!.backgroundColor = NSColor.redColor().CGColor // app crashes here
self.view.addSubview(myRect)
}
The app crashed in the third line: EXC_BAD_INSTRUCTION.
Not only Swift but also Xcode is totally new to me and I would appreciate any help.
It’s been a while since I asked this question but I noticed that it got a lot of views recently, so providing an actual answer (Swift 4.2) might be helpful for a bunch of people:
override func viewDidLoad() {
let myFrame = NSRect(x: 0.0, y: 0.0, width: 200.0, height: 200.0)
let myRect = NSView(frame: myFrame)
myRect.backgroundColor = NSColor.red
self.view.addSubview(myRect)
}
Try putting the code in ViewDidAppear instead...
you are trying to draw a rectangle on a view which hasn't been displayed yet.
I think you missed to add the following before setting the background color:
theRectangle.wantsLayer = true

Trouble importing foundation into swift... Xcode 6 beta

I am brand new to Xcode. Thank you for reading this.
I'm simply attempting to get used to the language, so I'm simply messing with code by importing Foundation and creating a simple NSRect. However, I'm getting an error when I try to create NSRect.
Here's the code:
import Foundation
import UIKit
let rect = NSRect(x: 50, y: 50, width: 100, height: 100)
And then I receive an error saying "Use of unresolved identifier 'NSRect"." What am I doing incorrectly?
Thank you for your help!
Use CGRect instead of NSRect . NSRect is for Cocoa, if project is for mac app use import Cocoa.
import Foundation
import UIKit
let rect = CGRect(x: 50, y: 50, width: 100, height: 100)

Resources