当我消除所有nil_s时,为什么我在解包一个Optional值时会得到nil?

时间:2016-06-11 12:59:06

标签: ios swift global-variables

嘿,我有放置变量的问题。 我怎样才能使用我使用的变量让我们在函数" A"在另一个功能" B"。换句话说,使用函数" A"在功能" B"

我有功能(" A")来设置通知文本:

let sentence = textField.text! + " Some beautiful text!"

let firstWord = sentence.characters.split(" ").first.map(String.init)

LocalNotificationHelper.sharedInstance().scheduleNotificationWithKey("someText", title: "see options(left)", message: sentence, date: deadlinePicker.date, userInfo: userInfo)

现在我要在这个变量中的另一个函数(" B")里面调用firstWord

let predicate = CNContact.predicateForContactsMatchingName(firstWord)

我尝试在sentence和课外添加第一个变量firstWordViewDidLoad,但一无所获。我一直收到错误"found nil while unwrapping" 当用户点击这样的通知操作按钮时,我将函数调用为变量predicate

NSNotificationCenter.defaultCenter().addObserver(self, selector: "functionWhereIsPredicateVariable:", name: IDENTIFICATOR, object: nil)

我是否必须将firstWord存储到NSUserDefaults中,还是必须以其他方式存储?

2 个答案:

答案 0 :(得分:1)

您可以将您的姓名保存到userinfo

let userInfo = ["url" : "Hello","name":nameField.text!]

//Set notification
                LocalNotificationHelper.sharedInstance().scheduleNotificationWithKey("TempCo", title: "see options(left)", message:nameField.text!+" Your contact needs to be deleted!", date: deadlinePicker.date, userInfo: userInfo)

然后你可以从通知的对象中获取并发布它。

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {
    if identifier == DELETECONTACT {
        print("delete action - tapped")

        NSNotificationCenter.defaultCenter().postNotificationName(DELETECONTACT, object:notification.userInfo)

您可以从通知对象中获取姓名

//**DELETE CONTACT FUNCTION**\\
func contactDelete(notification : NSNotification){
let name:String? = notification.object?["name"]  as? String

答案 1 :(得分:0)

您有两组具有相同名称的变量,一组在类范围内声明,另一组在函数范围内声明。在函数A中,您设置函数作用域变量的值,但在函数B中,您正在访问仍为零的类作用域变量。

要修复它,请删除函数A中使用句子和firstWord的“let”。