2016-04-16 15 views
11

Tôi là người mới bắt đầu trong iOS và nhanh chóng.Có chức năng nào nhanh chóng tương tự như R.java trong Android không?

Tôi đã từng viết Android và tôi nghĩ R.java là một ý tưởng hay để quản lý id, drawables, chuỗi và các tài nguyên khác. Vì vậy, tôi ngạc nhiên khi iOS không cung cấp chức năng tốt để truy cập tài nguyên.

Nếu tôi muốn lấy một hình ảnh từ tài sản, tôi gọi UIImage(named: "img_name"), nhưng tôi không nghĩ đây là cách tốt nhất để truy cập img_name, tôi có thể sử dụng tên sai và tôi không thể tải hình ảnh.

Tôi đã tìm thấy một số dự án mã nguồn mở như SharkSwiftGen, nhưng Shark chỉ hỗ trợ hình ảnh và SwiftGen có vẻ như cần chạy lệnh không tự động.

Bạn có giải pháp nào tốt hơn không? Cảm ơn bạn!

Trả lời

3

Tôi có một dự án mã nguồn mở R.swift-plugin nó cung cấp các tính năng như bạn đã đề cập. Bạn chỉ cần cài đặt Xcode Plugin qua Alcatraz và tìm kiếm R.swift

Plugin sẽ tự động tạo ra một tập tin tài nguyên để quản lý hình ảnh của bạn, dây bản địa hóa và màu sắc, và bạn có thể truy cập chúng như sử dụng R.java

Cách sử dụng :

enter image description here

Trân trọng khuyên bạn nên dùng thử. Và vui lòng cho tôi bất kỳ đề xuất nào để cải thiện nó :)

+0

Nó trông chắc chắn những gì tôi muốn! Nhưng chỉ hỗ trợ chuỗi, hình ảnh, màu sắc. Dù sao tôi sẽ thử nó. –

+0

Có, tôi nghĩ rằng các chuỗi, hình ảnh và màu sắc nên là các tài nguyên phổ biến nhất. –

+0

Nhưng tôi dự định làm cho nó hỗ trợ id (reuseidentifier, segue), bố trí (nib), bool, dimen và số nguyên sau! Tôi thực sự hy vọng plugin này sẽ hữu ích. –

4
  • Nếu bạn đang sử dụng InterfaceBuilder (còn gọi là Storyboard, xib), không có cần phải xác định id cho từng xem. Bạn có thể bind cửa hàng trong mã.

  • Nếu bạn muốn truy xuất chế độ xem bằng id của chúng (như R.java như bạn đã hỏi), bạn có thể đặt thẻ cho mỗi chế độ xem và thao tác chúng trong mã. enter image description here

Không giống như AndroidStudio, Xcode sẽ không tạo ra bất kỳ tập tin.

func viewDidLoad() { 
    let labelView = self.view.viewWithTag(0) as? UILabel 
} 
+0

Cảm ơn bạn. Nhưng nó chỉ hỗ trợ id và bố cục đúng không? Có chức năng nào để quản lý hình ảnh, màu sắc hay dây không? –

+0

Thêm hình ảnh của bạn vào thư mục 'Nội dung' trong Xcode. Thông thường, nó chỉ đủ để thêm hình ảnh 3x và được mở rộng. 'UIImage (tên:" hello ")' sẽ truy xuất hình ảnh có tên 'hello' từ' Assets'. – GRiMe2D

+0

Có, nhưng việc sử dụng tên của hình ảnh để bắt đầu có thể không thành công do lỗi đánh máy –

4

Không có chức năng như vậy trong Xcode bản thân, nhưng có một dự án mã nguồn mở mà chỉ này: R.swift

Nó tự động cập nhật các tập tin được tạo ra và hỗ trợ rất nhiều các loại tài nguyên khác nhau như hình ảnh , phông chữ, phân đoạn và hơn thế nữa.

+0

Các bước cài đặt trông rất phức tạp. Nhưng nó có vẻ là một giải pháp tốt. –

1

Bạn có thể có chức năng tương tự bằng cách sử dụng tiện ích và enums.

Sử dụng enums cho phép bạn tránh lỗi chính tả và hưởng lợi từ tính năng tự động/tự động hoàn thành của Xcode.

Ví dụ cho UIImage:

extension UIImage { 

    enum ImageId: String { 
     // These are your images NAMES, 
     // as in "SpriteMonster.jpg" 
     case SpriteMonster, SpriteHero, BaseLandscape 
    } 

    convenience init!(id: ImageId) { 
     self.init(named: id.rawValue) 
    } 
} 

Cách sử dụng:

let monster = UIImage(id: .SpriteMonster) // the "SpriteMonster.jpg" image 

Ví dụ này Tôi cưỡng unwrapping init thuận tiện, vì vậy hãy cẩn thận để thực sự có hình ảnh với tên chính xác trong gói của bạn.

Đối với String:

extension String { 

    enum StringId: String { 
     case Welcome = "Welcome to the game!" 
     case GameOver = "You loose! Game over!" 
    } 

    init(id: StringId) { 
     self = id.rawValue 
    } 

} 

Cách sử dụng:

let label = String(id: .Welcome) // "Welcome to the game!" 

Đối với phông chữ:

extension UIFont { 

    enum FontId { 
     case HelveticaNeueLarge 
     case HelveticaNeueMedium 
     case HelveticaNeueSmall 

     func font() -> UIFont { 
      switch self { 
      case .HelveticaNeueLarge: 
       return UIFont(name: "HelveticaNeue", size: 18)! 
      case .HelveticaNeueSmall: 
       return UIFont(name: "HelveticaNeue", size: 12)! 
      default: 
       return UIFont(name: "HelveticaNeue", size: 14)! 
      } 
     } 
    } 

    class func get(id: FontId) -> UIFont { 
     return id.font() 
    } 

} 

Cách sử dụng:

let font = UIFont.get(.HelveticaNeueLarge) // <UICTFont: 0x7ffd38f09180> font-family: "Helvetica Neue"; font-weight: normal; font-style: normal; font-size: 18.00pt 

Đây chỉ là những ví dụ để chứng minh khái niệm, bạn có thể tiến xa hơn với điều này.

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