相关疑难解决方法(0)

在Interface Builder中使用泛型类作为自定义视图

我有一个UIButton的自定义子类:

import UIKit

@IBDesignable
class MyButton: UIButton {

    var array : [String]?

}
Run Code Online (Sandbox Code Playgroud)

它是IBDesignable,我已将其设置为故事板中其中一个按钮的自定义类.我想使它通用,以便数组不必是String对象之一.所以,我试过这个:

import UIKit

@IBDesignable
class MyButton<T>: UIButton {

    var array : [T]?

}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何将其设置为IB中的班级.我尝试使用MyButton<String>MyButton<Int>,但Interface Builder只删除尖括号部分并获得以下编译错误:

Command /Applications/Xcode6-Beta4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
Run Code Online (Sandbox Code Playgroud)

有没有办法使用通用自定义类,还是不支持?

generics interface-builder ios swift xcode6

21
推荐指数
1
解决办法
5718
查看次数

Xcode 7 Swift 2无法实例化通用UITableViewController的UIViewController子类

我有一个通用类:

class PaginatedTableViewController
  <GenericElement, Source: PaginationDataSource 
     where Source.PaginatedGenericElement == GenericElement>:
  UITableViewController
Run Code Online (Sandbox Code Playgroud)

另一个我试图从故事板中实例化:

class CandidatesTableViewController: 
   PaginatedTableViewController<Match, MatchPaginationDataSource>
Run Code Online (Sandbox Code Playgroud)

CandidatesTableViewController在故事板Custom Class下拉菜单中找不到.如果我强制它然后在代码中转换我的控制器,应用程序在运行时崩溃抱怨我的控制器(应该是CandidatesTableViewController实例)实际上是一个UITableViewController实例.

Interface Builder文件中的未知类_TtC21MyProjectName29CandidatesTableViewController.无法将'UITableViewController'类型的值(0x1040917f8)转换为'MyProjectName.CandidatesTableViewController'(0x1013a9890).

在我的项目中,这个控制器嵌入另一个控制器,这就是我投射它的原因:

tableViewController = (segue.destinationViewController as! CandidatesTableViewController)
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

generics ios swift swift2

6
推荐指数
1
解决办法
591
查看次数

"使用继承自Storyboard中的泛型类的类时,"界面构建器文件中的未知类"

最近我重构我的课BookTableViewController从一个简单的继承UITableViewController,所以它现在从一个普通的类继承FetchedResultsTableViewController<TResultType, TCellType>其本身继承UITableViewController.

类声明如下所示:

class BookTableViewController: FetchedResultsTableViewController<Book, BookTableViewCell> {

    override func viewDidLoad() {
        // breakpoints in here do not catch!
    }

}

class FetchedResultsTableViewController<TResultType, TCellType: UITableViewCell>: 
    UITableViewController, NSFetchedResultsControllerDelegate {

    // implementation here

}
Run Code Online (Sandbox Code Playgroud)

在Storyboard中,Custom类和Module都已设置,我可以单击箭头跳转到BookTableViewController类的代码,建议故事板正确链接到类.但是,当我尝试运行应用程序时,无法识别该类 - 代码输入viewDidLoad()未运行,并且在运行我的应用程序时收到以下记录的消息:

Interface Builder文件中的未知类_TtC12Reading_List23BookTableViewController.

我正在运行XCode 7.3(Swift 2.2).这是故事板的限制,一个错误,还是我错过了什么?

谢谢!

更新:

经过一些实验,它似乎与通用继承有关,而不是类的可访问性.定义了以下类:

import Foundation
import UIKit

// Both of these classes are accessible by the Storyboard
class FirstInheritance : UITableViewController{}
class SecondInheritance : FirstInheritance{} …
Run Code Online (Sandbox Code Playgroud)

xcode uikit ios swift xcode7

6
推荐指数
1
解决办法
1356
查看次数

Swift 如何创建像 UIViewController 这样的通用 MVP

我想删除重复的代码,所以我想创建一个简单的 MVP 基础视图控制器,它将模型、视图和演示者类型联系在一起并自动连接它们,例如:

class BaseMvpViewController<M: MvpModel, V: MvpView, P: MvpPresenter>: UIViewController {
Run Code Online (Sandbox Code Playgroud)

我的模型和视图是空协议的地方:

protocol MvpModel {}
protocol MvpView: class {} // class is needed for weak property
Run Code Online (Sandbox Code Playgroud)

主持人看起来像这样:

protocol MvpPresenter {
    associatedtype View: MvpView
    weak var view: View? { get set }
    func onAttach(view: View)
    func onDetach(view: View)
}
Run Code Online (Sandbox Code Playgroud)

这是我的全部BaseMvpViewController

class BaseMvpViewController<M: MvpModel, V, P: MvpPresenter>: UIViewController, MvpView {
    typealias View = V
    var model: M? = nil
    var presenter: P!

    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: …
Run Code Online (Sandbox Code Playgroud)

generics mvp ios swift

2
推荐指数
1
解决办法
2789
查看次数

标签 统计

ios ×4

swift ×4

generics ×3

interface-builder ×1

mvp ×1

swift2 ×1

uikit ×1

xcode ×1

xcode6 ×1

xcode7 ×1