ios - সুইফ্ট সংকলক ত্রুটি: একটি স্ট্রিং কনটেন্টেশনে "এক্সপ্রেশন খুব জটিল"



xcode swift (3)

আপনি যা বলেন না কেন এটি বেশ হাস্যকর! :)

তবে এটি সহজেই পাস হয়ে যায়

return "\(year) \(month) \(dayString) \(hour) \(min) \(weekDay)"

https://ffff65535.com

আমি যেকোন কিছুর চেয়ে এই মজাদার খুঁজে পাই। আমি এটি স্থির করেছি, তবে কারণ সম্পর্কে আমি ভাবছি। এখানে ত্রুটিটি রয়েছে: DataManager.swift:51:90: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions DataManager.swift:51:90: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions । কেন অভিযোগ করছে? এটি সম্ভবত সবচেয়ে সহজ এক্সপ্রেশনগুলির মতো মনে হয়।

সংকলক columns + ");"; অধ্যায়

func tableName() -> String { return("users"); } 

func createTableStatement(schema: [String]) -> String {

    var schema = schema;

    schema.append("id string");
    schema.append("created integer");
    schema.append("updated integer");
    schema.append("model blob");

    var columns: String = ",".join(schema);

    var statement = "create table if not exists " + self.tableName() + "(" + columns + ");";

    return(statement);
}

ফিক্সটি হ'ল:

var statement = "create table if not exists " + self.tableName();
statement += "(" + columns + ");";

এটি (@ ফিশেকেন্সির মাধ্যমে )ও কাজ করে তবে আমি এটি এতটা পছন্দ করি না কারণ আমি মনে করি ( হারিয়ে যাওয়া:

var statement = "create table if not exists \(self.tableName()) (\(columns))"


আমার একই সমস্যা ছিল:

expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

এক্সকোডে 9.3 লাইনটি এভাবে চলে:

let media = entities.filter { (entity) -> Bool in

এটি এ জাতীয় কিছুতে পরিবর্তন করার পরে:

let media = entities.filter { (entity: Entity) -> Bool in

সবকিছু কাজ করে।

চারপাশের কোড থেকে ডেটা ধরণের অনুমানের চেষ্টা করার সাথে সাথে সম্ভবত সুইফ্ট সংকলকটির সাথে এর কিছু আছে।


এটি গৃহীত উত্তর হিসাবে প্রায় একই তবে কিছু যুক্ত সংলাপের সাথে (আমার সাথে রব নেপিয়ার, তার অন্যান্য উত্তর এবং একটি কোকোহেড মিটআপের আরেক বন্ধু) ছিল এবং লিঙ্কগুলি।

this আলোচনায় মন্তব্য দেখুন। এর সূচনাটি হ'ল:

+ অপারেটরটি ভারী ভারী হয়েছে, এখন পর্যন্ত এটির 27 টি বিভিন্ন ফাংশন রয়েছে তাই আপনি যদি 4 টি স্ট্রিং কনটেনেট করছেন অর্থাৎ আপনার কাছে 3 + অপারেটর রয়েছে প্রতি বার 27 টি অপারেটরের মধ্যে সংযোজকটি পরীক্ষা করতে হবে, তাই এটি 27 ^ 3 বার। তবে তা নয়।

এটির জন্য একটি check রয়েছে যেটি + ফাংশনগুলির lhs এবং rhs উভয়ই বৈধ কিনা তা যদি বলা হয় যে এটি append কল করে কল করে। সেখানে আপনি দেখতে পাচ্ছেন কিছুটা নিবিড় checks যা ঘটতে পারে। যদি স্ট্রিংটি অ-স্বচ্ছভাবে সংরক্ষণ করা হয়, যা আপনার সাথে স্ট্রিংটি স্ট্রিংটি এনএসএসআরটিংয়ের সাথে সেতুবন্ধিত হয়ে থাকলে বাস্তবে এটি উপস্থিত হয়। তারপরে সুইফটকে সমস্ত বাইট অ্যারে বাফারগুলিকে একটি একক সঙ্গতিপূর্ণ বাফারে পুনরায় একত্রিত করতে হবে এবং যার জন্য নতুন বফার তৈরি করতে হবে। এবং তারপরে আপনি শেষ পর্যন্ত একটি বাফার পাবেন যার মধ্যে স্ট্রিং রয়েছে যা আপনি একসাথে একত্রিত করার চেষ্টা করছেন।

সংক্ষেপে 3 টি ক্লাস্টার সংকলক চেক রয়েছে যা আপনাকে ধীর করে দেবে অর্থাত্ প্রতিটি উপ-এক্সপ্রেশনটি ফিরে আসতে পারে এমন সমস্ত কিছুর আলোকে পুনর্বিবেচনা করতে হবে । ফলস্বরূপ সংক্ষিপ্তসারযুক্ত স্ট্রিংগুলি যেমন " My fullName is \(firstName) \(LastName)" ব্যবহার করা "My firstName is" + firstName + LastName চেয়ে অনেক ভাল কারণ "My firstName is" + firstName + LastName কোনও ওভারলোডিং নেই

সুইফট 3 কিছু উন্নতি করেছে। আরও তথ্যের জন্য পড়ুন কীভাবে সংকলকটি ধীর না করে একাধিক অ্যারে মার্জ করবেন? । তবুও + অপারেটরটি এখনও ওভারলোডেড এবং দীর্ঘ স্ট্রিংগুলির জন্য স্ট্রিং ইন্টারপোলেশন ব্যবহার করা ভাল

রব নেপিয়ারের অন্যান্য অনুরূপ উত্তর এসও তে:

স্ট্রিং সংযোজনটি কেন এত দীর্ঘ সময় নেয়?

সংকলকটি ধীর না করে একাধিক অ্যারে কীভাবে মার্জ করবেন?

সুইফ্ট অ্যারেতে ফাংশনটি বিল্ড বারকে দীর্ঘ করে তোলে





functional-programming