No se puede convertir el valor del tipo '() -> _' a tipo especificado uiimageView -- ios campo con swift campo con uiimageview camp Relacionados El problema

Cannot convert value of type '() -> _' to specified type UIImageView


19
vote

problema

Español

Estoy tratando de hacer una vista de UiImage Clickable, pero no tengo suerte. ¿Cuál es la mejor manera de completar esta tarea? El error que recibo es "no se puede convertir el valor del tipo '() y gt; _' a tipo especificado 'uiimageView'".

  x count d 2 d 2 e 3 e 3 e 3 f 2 f 2 7  
Original en ingles

I am trying to make a UIImage view clickable, but I am having no luck. What is the best way to complete this task? The error I am getting is "Cannot convert value of type '() -> _' to specified type 'UIImageView'".

lazy var profileImageView: UIImageView = {      let imageView = UIImageView()      imageView.image = UIImage(named: "ic_file_upload_white_48pt")      imageView.translatesAutoresizingMaskIntoConstraints = false      imageView.contentMode = .scaleAspectFill       imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectorProfileImage)))      imageView.isUserInteractionEnabled = true      return imageView  } 
        
   
   

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

parece un problema de sintaxis, intente

  func profileImageView() -> UIImageView {         let imageView = UIImageView()         imageView.image = UIImage(named: "ic_file_upload_white_48pt")         imageView.translatesAutoresizingMaskIntoConstraints = false         imageView.contentMode = .scaleAspectFill          imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectorProfileImage)))         imageView.isUserInteractionEnabled = true         return imageView }   
 

Looks like a syntax issue, try

func profileImageView() -> UIImageView {         let imageView = UIImageView()         imageView.image = UIImage(named: "ic_file_upload_white_48pt")         imageView.translatesAutoresizingMaskIntoConstraints = false         imageView.contentMode = .scaleAspectFill          imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectorProfileImage)))         imageView.isUserInteractionEnabled = true         return imageView } 
 
 
 
 
66
 
vote

Le está diciendo al compilador que desea hacer profileImageView contiene un cierre. Si desea que PerfilImageView contenga los los resultados de ese cierre, debe agregar a las parentes después de invocar el cierre:

  lazy var profileImageView: UIImageView = {   //your code here   return imageView }()   

Tenga en cuenta los paréntesis después del cierre. Que asigna el resultado de llamar al cierre a su variable profileImageView la primera vez que hace referencia a la variable.

Editar:

Cada vez que vea un tipo de normalize=True0 Es un cierre. El bit normalize=True111111111111. Los mensajes de error de Swift pueden ser difíciles de descifrar, pero eso es una pista que está devolviendo un cierre en lugar de lo que se espera.

Editar # 2:

Tenga en cuenta que hay 2 construcciones similares relacionadas con una variable definida por un cierre en SWIFT: propiedades computadas y variables perezosas.

Propiedades computadas

Una propiedad computarizada se declara como

  normalize=True2  

No hay igual signo en una propiedad computarizada. Cada vez que solicite un valor de la propiedad computarizada, se ejecuta el código de cierre y el valor devuelto del cierre es el nuevo valor de la propiedad.

Vars Lazy:

A Lazy Var parece esto:

  normalize=True3  

La expresión es a menudo un cierre, pero no tiene que serlo. Una forma común de un VAR Lazy usaría un cierre, como este:

  normalize=True4  

Hay un signo igual en la Declaración de un Var Lazy. Si usa un cierre para asignar un valor a un VAR Lazy, debe agregar paréntesis después del cierre, por lo que se le asigna el VAR LLEY, el valor devuelto del cierre, no el cierre en sí. Este hilo se acercó cuando @jameel olvidó los paréntesis de cierre en su código.

Considere el siguiente código:

  normalize=True5  

que imprime la salida:

  normalize=True6  

Tenga en cuenta que el valor del VAR Lazy no cambia, sino que el valor de la propiedad computar. Esa es la diferencia clave entre ellos.

Una variable perezosa se evalúa una vez la primera vez que lo solicita, y ese valor "se pega". La expresión / cierre que da el valor no se ejecuta hasta que lo solicite, y luego una sola vez.

En contraste, una propiedad computarizada siempre usa un cierre, y cada vez que solicita el valor de una propiedad computada, se ejecuta el cierre.

 

You are telling the compiler that you want to make profileImageView contain a closure. If you want profileImageView to contain the results of that closure, you need to add parens after in order to invoke the closure:

lazy var profileImageView: UIImageView = {   //your code here   return imageView }() 

Note the parentheses after the closure. That assigns the result of calling the closure to your variable profileImageView the first time you reference the variable.

Edit:

Any time you see a type of (<something>) -> type it's a closure. The -> bit separates the parameters from the return type. Swift's error messages can be hard to decipher, but that's a clue that you're returning a closure rather than whatever is expected.

Edit #2:

Note that there are 2 similar constructs related to a variable defined by a closure in Swift: Computed properties and lazy variables.

Computed properties

A computed property is declared as

var computed: type { closure_returning_result } 

There is no equals sign in a computed property. Every time you ask for a value from the computed property, the closure code runs, and the returned value of the closure is the new value of the property.

Lazy vars:

A lazy var looks like this:

var lazy: type = expression_returning_result 

The expression is often a closure, but it doesn't have to be. A common form of a lazy var would use a closure, like this:

var lazy: type = { closure_returning_result }() 

There is an equals sign in the declaration of a lazy var. If you use a closure to assign a value to a lazy var, you need to add parentheses after the closure, so the lazy var is assigned the returned value of the closure, not the closure itself. This thread came up when @jameel forgot the closing parentheses in his code.

Consider the following code:

var counter = 1  var computed: Int  {     counter += 1     return counter }  var lazy: Int = {     counter += 1     return counter }()  print("lazy = \(lazy)") print("lazy = \(lazy)") print("lazy = \(lazy)")  print("computed = \(computed)") print("computed = \(computed)") print("computed = \(computed)") 

That prints the output:

lazy = 2 lazy = 2 lazy = 2 computed = 3 computed = 4 computed = 5 

Note that the value of the lazy var doesn't change, but the value of the computed property does. That is the key difference between them.

A lazy variable gets evaluated once the first time you ask for it, and that value "sticks". The expression/closure that gives the value is not run until you ask for it, and then only once.

In contrast, a computed property always uses a closure, and every time you ask for the value of a computed property, the closure is executed.

 
 
6
 
vote

Debe agregar paranthesis después del final de la propiedad calculada para ejecutarlo.

  normalize=True7  
 

You should add paranthesis after the end of computed property in order to execute it.

lazy var profileImageView: UIImageView = {      let imageView = UIImageView()      imageView.image = UIImage(named: "ic_file_upload_white_48pt")      imageView.translatesAutoresizingMaskIntoConstraints = false      imageView.contentMode = .scaleAspectFill       imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectorProfileImage)))      imageView.isUserInteractionEnabled = true      return imageView  }() 
 
 
 
 

Relacionados problema

0  La imagen no está actualizando en la aplicación  ( Image is not updating in app ) 
En mi aplicación, tengo una página desde donde el usuario puede actualizar su foto de perfil. Y en otra página también he visualizado esa imagen de perfil. Es...

1  Cargue una imagen de la URL con UIACTATIONYIndicatorView en UiImageView  ( Load an image from url with uiactivityindicatorview on uiimageview ) 
En mi aplicación de iPhone, tengo un UitabelVer lo que llena los datos a través de la URL. Cuando selecciono una celda de UITYVIEW, llama a la URL y descarga ...

0  Múltiples tipos de células en UicollectorView  ( Multiple cell types in uicollectionview ) 
Había creado dos tipos de celdas para mi colección, ambos son de diferentes alturas. Pero cuando ejecuto la aplicación, la celda negra se corta por la mi...

0  Programación de iPhone de Xcode: Envío de una cadena de URL analizada desde un archivo XML a través de SEGUE para ser cargado en UiimageView  ( Xcode iphone programming sending a url string parsed from an xml file via segue ) 
Estoy creando una aplicación de iPhone donde se pasan 2 URL desde un archivo XML y se envían desde una vista UITUITY a una vista detallada a través de un Segu...

1  Evite que se muestre la vista maestra al arrastrar UIIMAGEVIE, cerca de él en una aplicación IPAD SplitView  ( Prevent the master view to be shown when dragging uiimageview close to it in a i ) 
Mi aplicación de iPad es una especie de juego en el que el usuario tiene que configurar las imágenes en el orden correcto. Por ejemplo, hay cuatro imágenes ...

1  UIIMAGEVIEW NO VISUALIZANDO LA IMAGEN CONJUNTO DE UITYVIEWCONROLLER  ( Uiimageview not displaying set image from uitableviewcontroller ) 
Tengo un UITableViewController con una lista de nombres de imágenes. Cuando se hace clic en el nombre, la URL de la imagen se establece en el ImageViewCont...

0  Ayector de eventos para la posición de una UIIMAGEVIEW  ( Event listener for the position of a uiimageview ) 
¿Cómo podría llamar a un método, de acuerdo con la coordenada Y de una vista UIIMAGE? Para ser más específico, tengo una UIIMAGEVIA arrastrable. Cuando la coo...

2  Especifique el ancho de la imagen de la celda  ( Specify width of the cell imageview ) 
¿Es posible restringir el ancho de [[cell imageView] un estándar UITableViewCell ? He intentado [[cell imageView] setFrame:CGRectMake(0, 0, 50, 50)] pero...

2  Strange UitableViewCellstylesubtitle + [Image ViewView] comportamientos  ( Strange uitableviewcellstylesubtitle cell imageview behaviors ) 
Esta pregunta me ha estado molestando durante un mes y me ha resistido a publicarlo, pero ya no puedo aguantar. Esto es lo que está pasando: Tengo una aplic...

10  Cómo insertar UIIMAGE en UiteXTVIEW  ( How to insert uiimage into uitextview ) 
Estoy trabajando en un proyecto de tipo portátil editable. Consiste en algún texto e imágenes en cualquier momento. En UITextView Si agregamos imágenes como...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos