[swift-users] Waiting for mouse input in a while loop (OS X)
George King
gwk.lists at gmail.com
Wed Mar 23 12:55:31 CDT 2016
I don't know of an easy way to block the main thread and wait for GUI input, without disrupting Cocoa. If you do not need the GUI, then I suggest using the debugger to set a breakpoint; in general it's worth the effort to learn to use the debugger, rather than just print statements. Alternatively, you could read a line from stdin, and then step through your algorithm by hitting return in the terminal. If you are trying to visualize your algorithm it gets trickier to do so without restructuring it to operate within the runloop.
> On Mar 23, 2016, at 1:48 PM, Ergin Bilgin <erginbil at gmail.com> wrote:
>
> Thank you for help. Maybe I have over simplified my problem. In my first example, your advice was totally fine. But when I want to do something more complex, I could not figure out how to use it. For example, I want to print each step in my insertion sort. Like this:
>
> for i in 1..<toSort.count{
> var j: Int = i
> while ((j > 0) && (toSort[j-1] > toSort[j])){
> let temp: Int = toSort[j]
> toSort[j] = toSort[j-1]
> toSort[j-1] = temp
> j--
> print(toSort)
> //Wait here.
> }
> }
>
> I am looking for a solution without tearing the sorting algorithm into pieces. (If it is possible.)
>
> Ergin
>
> On 23 March 2016 at 18:52, George King <gwk.lists at gmail.com <mailto:gwk.lists at gmail.com>> wrote:
> Hi Ergin,
> Are you familiar with how events are delivered via the application runloop? Essentially, you should not create a top-level loop that waits for input; the application runloop does this for you. If you want to accumulate 50 clicks, create the counter variable in the appropriate NSResponder (or UIResponder on iOS), e.g. your root NSView or your NSViewController. Then override `func mouseDown(event: NSEvent)` and increment the counter there.
> Hope that helps,
> George
>
>
> >
> > On Mar 23, 2016, at 12:35 PM, Ergin Bilgin via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
> >
> > Hello,
> >
> > I have a very simple while loop and I want to wait for a mouse click(can be a different input, not important) between every step. What I want to achieve is something like this:
> >
> > while (i < 50){
> >
> >
> > print(i)
> >
> > i
> > += 1
> >
> > waitForMouseClick
> > () //Wait here for user input.
> > }
> > I also use Sprite Kit if you can think a solution related to it.
> >
> > Cheers,
> >
> > Ergin
> >
> > _______________________________________________
> > swift-users mailing list
> > swift-users at swift.org <mailto:swift-users at swift.org>
> > https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160323/873e3f9c/attachment.html>
More information about the swift-users
mailing list