tag online metas hacer generar generador etiquetas description descripcion create creador como ios swift struct viewcontroller

ios - metas - meta tags online



No se puede llamar al valor del tipo de no funciĆ³n ''String'' (6)

Estoy tratando de pasar la variable ILTItem en mi ILTViewController, desencadenada por AppDelegate.swift cuando el usuario inicia mi aplicación a través de un deeplink.

El código con el que tengo errores:

No se puede llamar al valor del tipo de no función ''String''

en la línea donde defino ilt .

Aquí está el código que tengo en este momento:

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)

¿Por qué podría ser esto? En mi clase ILTViewController tengo:

class ILTViewController: UIViewController { // accept the incoming ILT struct var ILTitem: ILT!

IlT Struct Declaration:

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 }


El error le indica que está intentando llamar a una String lugar de a un método (constructor de la estructura en su caso). Probablemente haya declarado una variable String llamada ILT (mayúscula) en otro lugar y es por eso que falla.

Su código publicado funciona bien por lo que el error debe estar en otro lugar en su código.


Entonces tuve un problema con un mensaje de error similar. Estoy escribiendo una estructura para manejar Scalars para mi biblioteca y necesitaba una raíz cuadrada. Error fue

No se puede llamar al valor del tipo sin función ''Vsip.Scalar''

al llamar a sqrt. Se corrigió llamando explícitamente a sqrt como se muestra a continuación. Espero que esto ayude.

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)") } }


Al meterme con los diversos tipos de sintaxis de cierre de Swift + autocompletar, a menudo me encuentro en un lío de variables, tipos de devolución y uso de muy pocos o demasiados conjuntos de () o {}

Terminé con algo como:

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

Que estaba dando el error

No se puede llamar al valor del tipo de no función

La solución fue eliminar el final { } , que no es correcto en esta forma.

Solo deberían ser filenames.first(where: { $0 == filename } )

Verifique que no haya aplicado incorrectamente un juego de llaves al final de su falta de función, etc., o algún otro error difícil de detectar en su sintaxis de cierre Swift seleccionada actualmente.


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) } )

Debe asegurarse de usar el parámetro ( $0 o _ in ) en la expresión de cierre.

Use _ in o $0 para descartar o referenciar el parámetro. No se puede mover directamente al cuerpo del cierre y devolver true o recibirá este error (extremadamente inútil).


Envuelva su declaración de let en por ejemplo:

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


Tuve un problema similar en este código

array.first { $0 == item }

El problema era que $0 no se ajustaban al protocolo Equatable . En mi caso, se ajustaba a NSObjectProtocol y la simple comparación de punteros era suficiente, así que NSObjectProtocol el problema con

array.first { $0 === item }