- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我处于需要使用 Objective-C 类别来扩展 Swift 类的情况。我做了如下事情:
在“SomeClass.swift”中:
class SomeClass: NSObject {
}
在“SomeClass+Extension.h”中:
#import "Project-Swift.h"
@interface SomeClass (Extension)
-(void)someMethod();
@kết thúc
这很有效。如果我尝试在我的 Objective C 代码中使用 SomeClass 扩展,那没问题。
问题是,如果我想在另一个 Swift 类中使用 someMethod()
,我需要将 SomeClass+Extension.h
文件放入我的 ObjC-BridgingHeader.h
tài liệu.
但是这样做会造成循环依赖,因为SomeClass+Extension.h
同时导入了Project-Swift.h
。
有没有人有解决这个问题的好方法?
请注意,在类别标题中简单地向前声明类是行不通的,因为类别不能像这样对其自己的实现使用向前声明:
@class SomeClass
不导入 Project-Swift.h
会给出编译错误。
câu trả lời hay nhất
我也一直在和这个问题作斗争。不幸的是 tài liệu非常明确地指出不允许使用此模式:
To avoid cyclical references, don’t import Swift code into an Objective-C header (.h) file. Instead, you can forward declare a Swift class or protocol to reference it in an Objective-C interface.
Forward declarations of Swift classes and protocols can only be used as types for method and property declarations.
在整个链接页面中,您还会注意到它不断提到将生成的 header 专门导入到 .m 文件中:
To import Swift code into Objective-C from the same target
Import the Swift code from that target into any Objective-C .m file within that target
一个可能对您有用的解决方案是创建一个 swift 扩展,重新定义您在类别中需要的每个方法。它既脆弱又丑陋,但可以说是最干净的解决方案。
/**
Add category methods from objc here (since circular references prohibit the ObjC extension file)
*/
extension SomeClass {
@nonobjc func someMethod() {
self.performSelector(Selector("someMethod"))
}
}
@noobjc
添加到前面允许使用相同的方法签名 w/o 覆盖 ObjC 实现从桥接中导入“SomeClass+Extension.h”
标题可以删除如果需要支持两个以上的输入参数,或者需要更紧密的类型耦合,我建议使用运行时来调用底层函数。一个很好的描述是đây .
关于objective-c - 使用 Objective-C 类别扩展 Swift 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36563387/
Tôi đang làm theo hướng dẫn trong cuốn sách có tên "Sitepoint Full Stack Javascript with MEAN" và tôi vừa hoàn thành Chương 6, lẽ ra phải tạo một "máy chủ" với một "cơ sở dữ liệu". Cơ sở dữ liệu không là gì ngoài
Trong Jquery, tôi tạo hai mảng, một mảng được nhúng vào mảng kia, như thế này... arrayOne = [{name:'a',value:1}, {name:'b',value:2 }]vararra
Câu hỏi này đã có câu trả lời ở đây: Lời giải thích cho những hành vi JavaScript kỳ quái này được đề cập trong 'Wa
Tôi đã sử dụng mã của người khác và có một lớp được sử dụng làm cơ sở cho các thành phần khác. Khi tôi thử ng phục vụ --aot (hoặc build --prod), tôi nhận được thông báo sau. @Thành phần({ ...,
Tôi đang kiểm tra một số mã và đã tạo tệp json chứa dữ liệu. Vấn đề là tôi nhận được "[đối tượng đối tượng], [đối tượng đối tượng]" trong cảnh báo. Không có dữ liệu. Tôi đã làm gì sai? Đây là mã:
Tôi muốn in [đối tượng đối tượng],[đối tượng đối tượng] một cách khôn ngoan "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1 ' }]]"; ở ja
Tôi có một Chế độ xem chức năng mà tôi đang cố gắng xuất theo cách được định dạng đặc biệt. Nhưng tôi không thể làm cho chức năng danh sách hoạt động bình thường. Điều duy nhất tôi nhận được là [đối tượng đối tượng] [đối tượng đối tượng] [đối tượng đối tượng]
Trong khi làm việc trên một dự án WebGL bằng cách sử dụng các thư viện Sim.js và Three.js tuyệt vời, tôi đã gặp phải vấn đề tiếp theo: trong quá trình thực hiện, nó đã sử dụng hàm tạo tiếp theo của THREE.Ray: var ray = new THRE
Tôi đang sử dụng Material UI để thực hiện nhiều lựa chọn. Đây là mã của tôi. {listStates.map(col => (
Mã của tôi sử dụng ajax: $("#keyword").keyup(function() { var keywords = $("#keyword").val(); if (keyword.
Tôi gặp lỗi tiếp theo và không biết cách khắc phục. Không thể giải quyết tất cả các tham số cho AuthenticationService: ([đối tượng đối tượng], ?, [o
Tôi đang cố gắng tạo một biểu mẫu hiển thị các hộp kiểm động, ít nhất một trong số đó phải được chọn để tiếp tục. Tôi cũng cần có một bộ hộp kiểm tra. Đây là mã của thành phần: import { Component, OnInit } from '@angul
Tôi đang phát triển ứng dụng NodeJs, một ứng dụng blog. Tôi đang sử dụng trình xác thực nhanh và tôi đang cố gắng xác thực dữ liệu bằng tin nhắn flash trước khi lưu bài đăng vào cơ sở dữ liệu bằng tin nhắn flash nhanh ở phía giao diện người dùng, tôi đang lưu thành công dữ liệu trong cơ sở dữ liệu nhưng nó sẽ bị hủy sau khi gửi biểu mẫu.
Tôi biết một số người đã hỏi câu hỏi tương tự và nhận được câu trả lời. Tôi đã xem tất cả nhưng vẫn không thể giải quyết được vấn đề của mình. Tôi có một đoạn mã jquery gửi một giá trị đến một trình xử lý xử lý giá trị từ JS và lấy dữ liệu dưới dạng số JSON
Tôi kế thừa một dự án rất cẩu thả và tôi được giao nhiệm vụ giải thích tại sao nó lại tệ. Tôi nhận thấy rằng họ thực hiện những so sánh như thế này trong suốt mã (IQueryable).FirstOrDefault(x => x.Facility == fac
Tôi vừa tình cờ phát hiện ra điều này khi xóa các đối tượng trong một mảng. Mã như sau: Friends = []; Friends.push( { a: 'Nexus', b: 'Muffi
Sự khác biệt giữa hai đoạn mã này là gì: object = nil; [phát hành đối tượng] so với [phát hành đối tượng]; Cách thực hành tốt nhất là gì? câu trả lời hay nhất
Tôi nên chuyển tham số nào cho đối tượng cha đầu tiên mà đối tượng khác sẽ kế thừa và tham số nào hiệu quả hơn Object.create(Object.prototype) Object.create(Object) Object.creat
Tôi sắp xếp các bộ chọn khác nhau trên các đối tượng khác nhau [self performanceSelector:@selector(doSmth) withObject:objectA afterDelay:1];
Sự khác biệt giữa NSLog(@"%p", &object); và NSLog(@"%p", object); là gì? Cả hai dường như in ra một địa chỉ bộ nhớ, nhưng tôi không chắc đâu là địa chỉ bộ nhớ thực của đối tượng. Câu trả lời hay nhất Đây là điều tôi thích
Tôi là một lập trình viên xuất sắc, rất giỏi!