2016-11-02 16 views
14

Tôi đã thử tạo một thể hiện của một lớp bằng cách sử dụng một chuỗi theo nhiều cách mà không ai trong số chúng làm việc trong Swift 3.cách tạo thể hiện của một lớp từ một chuỗi trong swift 3

Dưới đây là pre-Swift 3 giải pháp tôi đã cố gắng mà không phải là làm việc

- Làm lớp một mục tiêu-c lớp

@objc(customClass) 
class customClass { 
    ... 
} 

//Error here: cannot convert value of type 'AnyClass?' to expected argument type 'customClass' 
let c: customClass = NSClassFromString("customClass") 

- Xác định lớp sử dụng giá trị NSString (cả có và không sử dụng thuộc tính @objc)

@objc(customClass) 
class customClass { 
    ... 
} 

//Error here: cannot convert value of type 'String' to expected argument type 'AnyClass' (aka 'AnyObject.Type') 
var className = NSStringFromClass("customClass") 

let c: customClass = NSClassFromString(className) 

Tôi không làm điều gì đúng nhưng chưa tìm thấy giải pháp nào trực tuyến.

Làm thế nào để tạo một thể hiện của một lớp bằng cách sử dụng một chuỗi trong Swift 3?

+0

Sự khác biệt giữa câu hỏi của tôi và cái bạn đã liên kết là tôi đang hỏi làm thế nào để làm điều này trong 'Swift3' vì câu trả lời từ câu hỏi đó không hoạt động với' Swift3' c của tôi ode – Danoram

+0

Đủ công bằng. Tôi đã rút lại phiếu bầu của tôi. – par

Trả lời

13

Bạn có thể thử này:

func stringClassFromString(_ className: String) -> AnyClass! { 

    /// get namespace 
    let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String; 

    /// get 'anyClass' with classname and namespace 
    let cls: AnyClass = NSClassFromString("\(namespace).\(className)")!; 

    // return AnyClass! 
    return cls; 
} 

sử dụng func như thế này:

class customClass: UITableView { 

    } 
let myclass = stringClassFromString("customClass") as! UITableView.Type 
let instance = myclass.init() 
+0

Nếu nó là 'let instance = myclass.init()'? – Danoram

+0

Vâng, bạn nói đúng. tôi đã viết lại mã số –

+0

Tôi thích giải pháp này! Mặc dù tôi muốn biết nếu có một giải pháp tương tự như phiên bản trước đó của swift - tương tự như 'NSClassFromString' – Danoram

Các vấn đề liên quan