我尝试将ILTITem变量传递到我的ILTViewController中,当用户通过deeplink启动我的应用时,由AppDelegate.swift触发。
我有错误的代码:
无法调用非函数类型"String"的值
在定义ilt
的那一行。
下面是我目前拥有的代码:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var ilt = ILT(homeworkID: 1234, title: "History ILT", subject: "History", teacher: "Miss A Smith", teacherCode: "asmith", studentID: 12345, description: "Description....", due: 1450137600, status: "In Progress", hasAttachments: true)
var newVC = ILTViewController()
newVC.ILTitem = ilt
appDelegate.window?.addSubview(newVC.view)
为什么会这样呢?在我的ILTViewController类中,我有:
class ILTViewController: UIViewController {
// accept the incoming ILT struct
var ILTitem: ILT!
IlT结构声明:
struct ILT {
let homeworkID: Int
let title: String
let subject: String
let teacher: String
let teacherCode: String
let studentID: Int
let description: String
let due: Double
let status: String
let hasAttachments: Bool
}
7条答案
按热度按时间v9tzhpje1#
这个错误告诉你你正在尝试调用一个
String
而不是一个方法(在你的例子中是结构构造函数)。你可能在其他地方声明了一个名为ILT
(大写)的String
变量,这就是失败的原因。您发布的代码works fine,所以错误一定是在代码中的其他地方。
l0oc07j22#
把你的let语句括起来,如:
imzjd6km3#
作品:
未通过:
必须确保在闭包表达式中使用参数(
$0
或_ in
)。使用
_ in
或$0
来丢弃或引用参数。您不能简单地直接移动到闭包主体并返回true
,否则您将收到此错误(非常无益)。2hh7jdfx4#
此代码中存在类似问题
问题是
$0
不符合Equatable
协议。在我的情况下,它符合NSObjectProtocol
,简单的指针比较就足够了,所以我用以下命令修复了这个问题kmpatx3s5#
所以我遇到了一个类似的错误消息。我正在为我的库编写一个处理标量的结构,需要一个平方根。错误是
无法调用非函数类型“Vsip.Scalar”的值
当调用sqrt时。通过如下所示显式调用sqrt修复了它。希望这能有所帮助。
h4cxqtbf6#
在使用Swift的各种闭包语法类型+ autocomplete时,我经常发现自己陷入了变量、返回类型的混乱,并且使用了太少或太多的
()
或{}
集合我最后得到了这样的结果:
它给出了错误
不能调用非函数类型的值
解决方案是删除尾随的
{ }
,这在此表单中是不正确的。应该是
filenames.first(where: { $0 == filename } )
检查一下你没有在non-function的末尾错误地使用一组大括号,或者在你当前选择的Swift闭包语法中有其他一些难以发现的错误。
tnkciper7#
检查您是否错过了可选选项的**?**。
在重载模式中,这个错误可能会显示为不同的问题,比如当我忘记标记可选时。
services.first(where: { $0.category?.id == categoryID })