why is this if let code in Swift Xcode 10.1 throwing a Thread 1: signal SIGABART












1















This code in Swift Xcode 10.1 keeps throwing a Thread 1: signal SIGABART error and I don't know why.



    let item = UserDefaults.standard.object(forKey: "To Does")
var arrayItem:[String]
print("about to check")
if let arrayItem2 = item as! [String]?{

arrayItem = arrayItem2
arrayItem.append(textInput.text!)
UserDefaults.standard.set(arrayItem, forKey: "To Does")
print(arrayItem)

}else{
UserDefaults.standard.set(textInput.text!, forKey: "To Does")
}
textInput.text = ""









share|improve this question


















  • 3





    Why use force cast when you are already using if let anyway?

    – Ricky Mo
    Nov 22 '18 at 4:34


















1















This code in Swift Xcode 10.1 keeps throwing a Thread 1: signal SIGABART error and I don't know why.



    let item = UserDefaults.standard.object(forKey: "To Does")
var arrayItem:[String]
print("about to check")
if let arrayItem2 = item as! [String]?{

arrayItem = arrayItem2
arrayItem.append(textInput.text!)
UserDefaults.standard.set(arrayItem, forKey: "To Does")
print(arrayItem)

}else{
UserDefaults.standard.set(textInput.text!, forKey: "To Does")
}
textInput.text = ""









share|improve this question


















  • 3





    Why use force cast when you are already using if let anyway?

    – Ricky Mo
    Nov 22 '18 at 4:34
















1












1








1








This code in Swift Xcode 10.1 keeps throwing a Thread 1: signal SIGABART error and I don't know why.



    let item = UserDefaults.standard.object(forKey: "To Does")
var arrayItem:[String]
print("about to check")
if let arrayItem2 = item as! [String]?{

arrayItem = arrayItem2
arrayItem.append(textInput.text!)
UserDefaults.standard.set(arrayItem, forKey: "To Does")
print(arrayItem)

}else{
UserDefaults.standard.set(textInput.text!, forKey: "To Does")
}
textInput.text = ""









share|improve this question














This code in Swift Xcode 10.1 keeps throwing a Thread 1: signal SIGABART error and I don't know why.



    let item = UserDefaults.standard.object(forKey: "To Does")
var arrayItem:[String]
print("about to check")
if let arrayItem2 = item as! [String]?{

arrayItem = arrayItem2
arrayItem.append(textInput.text!)
UserDefaults.standard.set(arrayItem, forKey: "To Does")
print(arrayItem)

}else{
UserDefaults.standard.set(textInput.text!, forKey: "To Does")
}
textInput.text = ""






swift






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 22 '18 at 4:17









Jensen CoonradtJensen Coonradt

112




112








  • 3





    Why use force cast when you are already using if let anyway?

    – Ricky Mo
    Nov 22 '18 at 4:34
















  • 3





    Why use force cast when you are already using if let anyway?

    – Ricky Mo
    Nov 22 '18 at 4:34










3




3





Why use force cast when you are already using if let anyway?

– Ricky Mo
Nov 22 '18 at 4:34







Why use force cast when you are already using if let anyway?

– Ricky Mo
Nov 22 '18 at 4:34














2 Answers
2






active

oldest

votes


















2














Never use a forced cast with if let. Never force cast to an optional. Neither make any sense.



Even once you fix that you have a problem. You first write a string to user defaults if there is nothing yet for the key. But then you try to read an array. That will never work.



Simplify your code and always write an read an array.



var items = UserDefaults.standard.array(forKey: "To Does") as? [String] ?? 
items.append(textInput.text!)
UserDefaults.standard.set(items, forKey: "To Does")





share|improve this answer
























  • Thank you so much!

    – Jensen Coonradt
    Nov 22 '18 at 18:34



















0














Try printing an item to console. Chances are it's neither nil, nor an [String] and it fails a forced cast.



If it's not - you can use a simpler cast. Try this in playground:



let item: Any? = 2
var arrayItem: [String] =
print("about to check")
if let arrayItem2 = item as? [String] {

arrayItem = arrayItem2
arrayItem.append("foo")
print(arrayItem)
} else {
print("doing nothing")
}


Outputs:



about to check
doing nothing





share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53423831%2fwhy-is-this-if-let-code-in-swift-xcode-10-1-throwing-a-thread-1-signal-sigabart%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    Never use a forced cast with if let. Never force cast to an optional. Neither make any sense.



    Even once you fix that you have a problem. You first write a string to user defaults if there is nothing yet for the key. But then you try to read an array. That will never work.



    Simplify your code and always write an read an array.



    var items = UserDefaults.standard.array(forKey: "To Does") as? [String] ?? 
    items.append(textInput.text!)
    UserDefaults.standard.set(items, forKey: "To Does")





    share|improve this answer
























    • Thank you so much!

      – Jensen Coonradt
      Nov 22 '18 at 18:34
















    2














    Never use a forced cast with if let. Never force cast to an optional. Neither make any sense.



    Even once you fix that you have a problem. You first write a string to user defaults if there is nothing yet for the key. But then you try to read an array. That will never work.



    Simplify your code and always write an read an array.



    var items = UserDefaults.standard.array(forKey: "To Does") as? [String] ?? 
    items.append(textInput.text!)
    UserDefaults.standard.set(items, forKey: "To Does")





    share|improve this answer
























    • Thank you so much!

      – Jensen Coonradt
      Nov 22 '18 at 18:34














    2












    2








    2







    Never use a forced cast with if let. Never force cast to an optional. Neither make any sense.



    Even once you fix that you have a problem. You first write a string to user defaults if there is nothing yet for the key. But then you try to read an array. That will never work.



    Simplify your code and always write an read an array.



    var items = UserDefaults.standard.array(forKey: "To Does") as? [String] ?? 
    items.append(textInput.text!)
    UserDefaults.standard.set(items, forKey: "To Does")





    share|improve this answer













    Never use a forced cast with if let. Never force cast to an optional. Neither make any sense.



    Even once you fix that you have a problem. You first write a string to user defaults if there is nothing yet for the key. But then you try to read an array. That will never work.



    Simplify your code and always write an read an array.



    var items = UserDefaults.standard.array(forKey: "To Does") as? [String] ?? 
    items.append(textInput.text!)
    UserDefaults.standard.set(items, forKey: "To Does")






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Nov 22 '18 at 4:35









    rmaddyrmaddy

    243k27320382




    243k27320382













    • Thank you so much!

      – Jensen Coonradt
      Nov 22 '18 at 18:34



















    • Thank you so much!

      – Jensen Coonradt
      Nov 22 '18 at 18:34

















    Thank you so much!

    – Jensen Coonradt
    Nov 22 '18 at 18:34





    Thank you so much!

    – Jensen Coonradt
    Nov 22 '18 at 18:34













    0














    Try printing an item to console. Chances are it's neither nil, nor an [String] and it fails a forced cast.



    If it's not - you can use a simpler cast. Try this in playground:



    let item: Any? = 2
    var arrayItem: [String] =
    print("about to check")
    if let arrayItem2 = item as? [String] {

    arrayItem = arrayItem2
    arrayItem.append("foo")
    print(arrayItem)
    } else {
    print("doing nothing")
    }


    Outputs:



    about to check
    doing nothing





    share|improve this answer






























      0














      Try printing an item to console. Chances are it's neither nil, nor an [String] and it fails a forced cast.



      If it's not - you can use a simpler cast. Try this in playground:



      let item: Any? = 2
      var arrayItem: [String] =
      print("about to check")
      if let arrayItem2 = item as? [String] {

      arrayItem = arrayItem2
      arrayItem.append("foo")
      print(arrayItem)
      } else {
      print("doing nothing")
      }


      Outputs:



      about to check
      doing nothing





      share|improve this answer




























        0












        0








        0







        Try printing an item to console. Chances are it's neither nil, nor an [String] and it fails a forced cast.



        If it's not - you can use a simpler cast. Try this in playground:



        let item: Any? = 2
        var arrayItem: [String] =
        print("about to check")
        if let arrayItem2 = item as? [String] {

        arrayItem = arrayItem2
        arrayItem.append("foo")
        print(arrayItem)
        } else {
        print("doing nothing")
        }


        Outputs:



        about to check
        doing nothing





        share|improve this answer















        Try printing an item to console. Chances are it's neither nil, nor an [String] and it fails a forced cast.



        If it's not - you can use a simpler cast. Try this in playground:



        let item: Any? = 2
        var arrayItem: [String] =
        print("about to check")
        if let arrayItem2 = item as? [String] {

        arrayItem = arrayItem2
        arrayItem.append("foo")
        print(arrayItem)
        } else {
        print("doing nothing")
        }


        Outputs:



        about to check
        doing nothing






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 22 '18 at 4:30

























        answered Nov 22 '18 at 4:24









        EimantasEimantas

        43k14116154




        43k14116154






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53423831%2fwhy-is-this-if-let-code-in-swift-xcode-10-1-throwing-a-thread-1-signal-sigabart%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

            Npm cannot find a required file even through it is in the searched directory