[swift-users] Waiting for mouse input in a while loop (OS X)

Ergin Bilgin erginbil at gmail.com
Wed Mar 23 13:06:30 CDT 2016


"print(toSort)" is only a placeholder there. Yes, it will be a
visualization. I am thinking of saving each state of "toSort" to another
array and show a fake visualization after sorting is finished. Using stdin
also might be a good solution but not very presentable.

Ergin

On 23 March 2016 at 19:55, George King <gwk.lists at gmail.com> wrote:

> 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> 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> 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
>> > 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/c1eb7844/attachment.html>


More information about the swift-users mailing list