2016-01-27 44 views
13

我试图将ILTItem变量传递到我的ILTViewController,当用户通过深层链接启动我的应用程序时,由AppDelegate.swift触发。无法调用非函数类型字符串的值

的代码我有错误:

不能调用非功能型“字符串”

在哪里,我定义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 I类有:

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 
} 
+0

安置自己的'ILT'类声明 – redent84

+0

@我将它redent84 – James

+3

你的代码工作正常:HTTP:// swiftstub.com/580271845。你可能已经在其他地方声明了一个名为'ILT'的String变量,这就是为什么它失败了。 – redent84

回答

14

错误是告诉你,你正在试图调用String,而不是一个方法(在你的情况下,结构构造函数)。您可能已在其他地方声明变量ILT(大写),这就是它失败的原因。

您的发布代码works fine因此错误必须在您的代码中的其他位置。

+0

谢谢。相关但稍微单独的问题 - 我的ILTViewController:UIViewController类没有收到新的变量 - print'ILTItem.title'返回null。任何想法为什么? – James

+2

我建议你用相关的代码来开一个新的问题,最好是一个自包含的示例项目来重现问题。 – redent84

0

环绕你let语句中,如果如:

if let xxx = yyy { 
    ... do something 
} 
0

所以,我有一个问题,类似的错误消息。我正在编写一个结构来处理我的库的Scalars并需要一个平方根。 错误是

不能调用非功能型 'Vsip.Scalar'

打电话时开方的价值。通过显式调用sqrt来修复它,如下所示。希望这可以帮助。

public var sqrt: Scalar { 
     switch self.type { 
     case .f: 
      return Scalar(sqrtf(self.realf)) 
     case .d: 
      let x = Foundation.sqrt(self.reald) 
      return Scalar(x) 
     case .cf: 
      return Scalar(vsip_csqrt_f(self.vsip_cf)) 
     case .cd: 
      return Scalar(vsip_csqrt_d(self.vsip_cd)) 
     default: 
      precondition(false, "sqrt not supported for type \(self.type)") 
     } 
    } 
0

在瞎搞与斯威夫特的各种封闭语法类型+自动完成我经常发现自己在变量一塌糊涂,返回类型,以及使用的(){}

我结束了太少或太多套喜欢的东西:

filenames.first(where: { $0 == filename }) { 

} 

这是给错误

无法调用非功能型解的

值是去除后{ },这是不以这种形式正确的。

应该只是filenames.first(where: { $0 == filename })

检查你有没有正确应用一组括号到非功能等,或者在您的当前选择雨燕的闭包语法其他一些难以发现的错误的末尾。

1
let works = ["foo", "bar"].first(where: { ($0 == "foo") }) 
let works = ["foo", "bar"].first(where: { (_ in true) }) 

VS

// Cannot call value of a non-function type 'String?' 

let fails = ["foo", "bar"].first(where: { (true) }) 

您必须确保在封闭表达式中使用的参数$0_ in)。

使用_ in$0放弃或引用参数。你不能简单地直接进入封闭体,并返回true,否则你会收到这个(非常无益的)错误。

1

在此代码

array.first { $0 == item } 

的问题是与$0不符合Equatable协议也有类似的问题。在我的情况下,它符合NSObjectProtocol和简单的指针比较是不够的,所以我固定的问题与

array.first { $0 === item } 
相关问题