Swift 3:编译器无法识别子类 UIView 的类型

Posted

技术标签:

【中文标题】Swift 3:编译器无法识别子类 UIView 的类型【英文标题】:Swift 3 : Compiler does not recognize type of subclassed UIView 【发布时间】:2017-01-17 00:48:14 【问题描述】:

我在构建项目时收到以下错误消息:

MyUIController:无法将类型“(LoadingView).Type”(又名“LoadingView.Type”)的值转换为预期的参数类型“UIView”

如果我的 LoadingView 类是 UIView 的子类,我不知道我是如何得到这个错误的。

MyUIController:

func loadingToLoading() 
        // getting error message at this line
        view.addSubview(LoadingView)
        loadingView.frame = CGRect(origin: .zero, size: view.frame.size)
    

加载视图:

import Foundation
import UIKit

final class LoadingView: UIView 

    private let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)

    override init(frame: CGRect) 

        spinner.startAnimating()

        super.init(frame: frame)

        addSubview(spinner)
        backgroundColor = UIColor.white
    

    @available(*, unavailable)
    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

    override func layoutSubviews() 
        super.layoutSubviews()
        spinner.center = center
    

【问题讨论】:

更改 view.addSubview(LoadingView) -> view.addSubview(loadingView) 【参考方案1】:

@nyohu 是对的。您在这里所做的是加载类定义而不是它的实例。您还可以使用这样的框架定义新视图

func loadingToLoading() 
    var loadingView = LoadingView(frame: CGRect(origin: .zero, size: view.frame.size))        
    view.addSubview(loadingView)

【讨论】:

以上是关于Swift 3:编译器无法识别子类 UIView 的类型的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Swift 中设置 UITableViewCell 中使用的 UIView 子类的背景颜色

带有协议问题的 Swift Generic UIView 子类

无法访问 Swift 子类中的 oc 类别方法

在 Swift 3.1 中为 UIView 子类设置默认外观而不覆盖 initialize()

尝试在自定义 UIView 子类上使用点击识别器时出现 NSUncaughtException

Swift - 添加UIView后无法点击按钮