如何在Swift中识别变量的类型.例如,如果我写
struct RandomStruct....
- 类型应该给我struct
而不是RandomStruct
或者如果我写class RandomClass...
的类型应该是class
和不RandomClass
.
我尝试过使用,Mirror.subjectType
并且type(of:)
两者都提供输出RandomStruct
和RandomClass
我有一个延伸的Swift类UITableViewController
.它有这个功能
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {...}
Run Code Online (Sandbox Code Playgroud)
有必要,我需要在一个地方以编程方式调用此函数
self.tableView(tableView, cellForRowAt: 1)
Run Code Online (Sandbox Code Playgroud)
如何以编程方式调用此函数?
我有一个在Objective-C中定义的协议,如下所示
@protocol TestProtocol
@required
- (void) printInputString:(NSString*) s
@end
Run Code Online (Sandbox Code Playgroud)
该协议通过pod发送到Swift项目,模块名称为 someModule
我想在Swift项目中使用这个协议
- 纯Swift类,即不从NSObject继承
- 从NSObject继承的Swift类(例如通过UIViewController)
例1.
class TestPureSwiftClass: TestProtocol
Run Code Online (Sandbox Code Playgroud)
例2.
class ArgumentModificationSwift: UIViewController, TestProtocol
Run Code Online (Sandbox Code Playgroud)
当我只实现Example 1
一切工作正常时,但只要我这样做Example 2
- 它给了我错误Module someModule not found
如何解决这个问题?
我看到了这个问题:如何以编程方式获取 ios 项目中包含的框架和库的列表?在这里,它试图回答类似的问题。但是,我对此有两个问题
上面链接中的答案(或参见下面的代码) - 它提供了所有框架还是“仅”链接到项目的框架。
for (NSBundle *framework in [NSBundle allFrameworks])
NSLog(@"%@",framework.bundlePath.lastPathComponent);
Run Code Online (Sandbox Code Playgroud)如果我在上面的代码中看到一个框架,我如何在我的代码中找到它的用法。我看到上面的代码中引用了许多框架,但我无法弄清楚它们到底在哪里使用。据我所知,其中很少有人不使用 - 是否有适当的方法来找出这一点。
更新 1:
我制作了一个简单的新应用程序,里面绝对没有代码。然后,我执行了for
上面的循环并发现,它还向我展示了所有框架——这意味着,上面的代码只是打印了所有框架,而不是我在我的应用程序中基本上使用的框架。但是,这是否意味着所有打印的框架都链接到应用程序?
在课堂上,我声明了一个线程,如:
@property (nonatomic, strong) dispatch_queue_t databaseQueue;
然后我执行这个线程的操作
dispatch_async(self.databaseQueue, ^{
[self.dao deleteRetries];
});
Run Code Online (Sandbox Code Playgroud)
这可能会创建一个保留周期吗?
和
当前类拥有对的强引用,viewControllerToDismiss
并且有一段代码如下:
[viewControllerToDismiss dismissViewControllerAnimated:shouldAnimateDismiss completion:^{
[self performSomeAction];
}
Run Code Online (Sandbox Code Playgroud)
这是一个保留周期吗?
根据这里的文档:使用Swift使用Cocoa和Objective-C,
我们需要具有完全限定的名称来获取类NSClassFromString()
例如,如果目标名称是ABC并且类名是XYZ,我们通过调用`NSClassFromString(ABC.XYZ)来获取类
但是,当目标名称中有空格时,即当目标名称类似时,我无法获得结果dummy target
.我们如何在这种情况下上课?
Xcode 项目的 Info.plist 中的 Bundle 标识符可以有多种形式,例如
我想编写一个只正确读取包标识符的 shell 脚本。
但是,如果您只知道 shell 脚本 - 我知道如何找出 $() 中变量的值,但是想要一个 shell 脚本,该脚本应该为我提供字符串中的所有此类变量,然后我将有代码来计算它们的值,我将创建字符串,并将变量替换为值。
function getBundleIdentifier
{
cfBundleIdentifier=${PRODUCT_BUNDLE_IDENTIFIER}
if [ ${#cfBundleIdentifier} -lt 1 ]; then
SOURCE="rfc1034identifier"
cfBundleIdentifier=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${PROJECT_DIR}/${INFOPLIST_FILE}")
if echo "$cfBundleIdentifier" | grep -q "$SOURCE"; then
echo `eval echo $cfBundleIdentifier``eval echo ${PRODUCT_NAME:rfc1034identifier}`
else
echo `eval echo $cfBundleIdentifier`
fi
else
echo $cfBundleIdentifier
fi
}
Run Code Online (Sandbox Code Playgroud)
这是我写的,但它并没有涵盖所有情况。
我想在Swift
使用中运行命令Process
.这是我目前的代码:
process.launchPath = "/bin/sh"
process.arguments = ["symbolicatecrash", "crash.crash"]
Run Code Online (Sandbox Code Playgroud)
但是,这会执行命令sh symbolicatecrash crash.crash
.我希望这个命令被执行为./symbolicatecrash crash.crash
.我怎样才能在Swift中实现同样的目标.
我尝试了以下代码(这是运行时崩溃)
process.launchPath = ""
process.arguments = ["symbolicatecrash", "crash.crash"]
Run Code Online (Sandbox Code Playgroud) 我创建了一个 coreML 模型,当我尝试在 Objective-C 项目中使用该模型时,出现以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MLFeatureValue", referenced from:
objc-class-ref in logistic_model_8000.o
"_OBJC_CLASS_$_MLModel", referenced from:
objc-class-ref in logistic_model_8000.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
PS:我不确定可以添加到问题中的其他细节可能有助于回答它。如果您需要更多详细信息,请在评论中提出。
我的代码是:
import java.util.Scanner;
public class AreaHexagon {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
double side, area;
System.out.print("Enter the side:");
side = s.nextDouble();
area = ((3 * Math.pow(3, 0.5) / 2)) * Math.pow(side, 2);
System.out.print("The area of the hexagon is " + area);
}
Run Code Online (Sandbox Code Playgroud)
}
我得到的错误信息是:对于6.6是侧面的长度,答案应该是113.17,但我得到113.17219976,依此类推.我尝试添加double roundOff = Math.round(side*100)/ 100; 但我不能让它正常运作.