如何在没有崩溃的情况下将参数传递给对象函数

时间:2018-03-14 21:06:09

标签: swift xcode function object arguments

我正在尝试将viewController的逻辑移到view model但由于某种原因它总是崩溃,说unexpectedly found nil while unwrapping an Optional value。无论我试图移动什么代码,我总是会遇到这个错误,所以我必须做一些根本错误的事情。以下是我在viewController中的代码示例:

var recipesViewModel: RecipesViewModel! //VIEW MODEL CLASS REFERENCE


var recipeCategory = recipesViewModel.transformToUpperCase(dataRecieverStringRecipeView: "testString")

然后在view model班:

func transformToUpperCase(dataRecieverStringRecipeView: String) -> String {
    var recipeCategory = dataRecieverStringRecipeView
    var prefixRecipeCategory = recipeCategory.prefix(1).uppercased()
    var dropFirstRecipeCategory = recipeCategory.dropFirst()
    var upperCasedRecipeCategory = prefixRecipeCategory + dropFirstRecipeCategory
    return upperCasedRecipeCategory
}

...它将字符串翻译成大写字母作为第一个字母。

当所有内容都在view model中时,代码运行得非常好,但是一旦我将它移动到另一个类并通过一个对象调用该函数就会崩溃。我错过了什么?

2 个答案:

答案 0 :(得分:0)

var recipesViewModel: RecipesViewModel!不会实例化新对象。将类别函数放回RecipesViewModel类中,然后将变量声明更改为:

<强>声明

var recipesViewModel: RecipesViewModel! 

稍后

recipesViewModel = RecipesViewModel() //or whatever initializer you need.

修改

正如rmaddy指出的那样:你可能会放弃!如果您没有任何可用的初始化程序或者这不是运行时注入的属性而只是将其作为1-liner:

,请使用var recipesViewModel: RecipesViewModel = RecipesViewModel()
var recipesViewModel: RecipesViewModel = RecipesViewModel()

答案 1 :(得分:0)

您需要修复视图模型类引用

要更改的行:

var recipesViewModel: RecipesViewModel!

替换行:

var recipesViewModel = RecipesViewModel()

这行代码将正确声明/创建recipesViewModel作为类RecipesViewModel的对象。

希望能解决你的问题!